Partner API v1
Un Partner e' chi porta merchant a PayGlobe: un rivenditore, un'agenzia, un integratore. Ha credenziali proprie, vede i suoi merchant, i volumi che generano e quanto guadagna su ciascuno; via API puo' anche crearli e configurarli.
Autenticazione API Key
Ogni Partner ha credenziali API dedicate:
- API Key (pk_partner_xxx) - Usata per autenticazione
- API Secret (sk_partner_xxx) - Per il login al portale e per le webhook signatures. Consegnato una volta sola: non e' recuperabile, solo rigenerabile
Base URL
https://api.payglobe.it/paymentgw/partner/api/v1
Funzionalità Principali
Gestione Merchant
Crea, configura e gestisci i tuoi merchant via APIConfigurazione Servizi
Abilita/disabilita gateway per ogni merchantMulti-Gateway
IGFS, Shift4, PayPal, BANCOMAT Pay, Zonda, etc.Sicurezza
API Key + IP Whitelist + Webhook SignaturesAutenticazione
Tutte le richieste API devono includere l'header Authorization con il tuo API Key:
curl -X GET https://api.payglobe.it/paymentgw/partner/api/v1/me \
-H "Authorization: Bearer pk_partner_xxxxxxxxxxxxxxxx"
Errori di Autenticazione
| Codice | Descrizione |
|---|---|
401 | API Key mancante o non valida |
403 | IP non in whitelist (se configurato) |
Quick Start
Esempio completo: crea un merchant e abilita BANCOMAT Pay
# 1. Crea un nuovo merchant
curl -X POST https://api.payglobe.it/paymentgw/partner/api/v1/merchants \
-H "Authorization: Bearer pk_partner_xxx" \
-H "Content-Type: application/json" \
-d '{
"merchantId": "STORE_001",
"merchantName": "Il Mio Negozio",
"environment": "TEST"
}'
# 2. Abilita BANCOMAT Pay
curl -X POST ".../merchants/STORE_001/services/BANCOMAT_PAY/enable" \
-H "Authorization: Bearer pk_partner_xxx"
# 3. Configura BANCOMAT Pay
curl -X PUT ".../merchants/STORE_001/services/BANCOMAT_PAY/config" \
-H "Authorization: Bearer pk_partner_xxx" \
-H "Content-Type: application/json" \
-d '{
"idPg": "ABCDE",
"idNegozio": "12345678901",
"merchantName": "Il Mio Negozio",
"mode": "sandbox"
}'
Dove si accede
Tutti gli indirizzi del programma partner. Non ce ne sono altri.
| Cosa | URL | Con cosa si entra |
|---|---|---|
| Portale partner (volumi, guadagno, transazioni) | https://api.payglobe.it/paymentgw/partner-login.html | API Key + API Secret |
| API partner (base URL) | https://api.payglobe.it/paymentgw/partner/api/v1 | header Authorization: Bearer pk_partner_... |
| Questa documentazione | https://api.payglobe.it/paymentgw/partner-api.html | pubblica |
| Dashboard dei merchant (non del partner) | https://api.payglobe.it/paymentgw/merchant-login.html | chiavi pk_/sk_ del singolo merchant + 2FA |
| Guida all'integrazione dei merchant | https://api.payglobe.it/paymentgw/partner.html | pubblica |
pk_partner_ non si entra nella dashboard di un merchant, e con la sk_ di un merchant non si entra nel portale partner. Un partner che vuole vedere la dashboard di un suo merchant usa le chiavi di quel merchant (o un account utente creato dal merchant).
Portale partner
partner-login.html → si entra con API Key + API Secret. Dentro:
- periodo selezionabile (default: mese corrente);
- totali: transazioni incassate, volume lordo, rimborsato, commissioni PayGlobe, il tuo guadagno;
- tabella per merchant, con il pricing applicato a ciascuno;
- elenco transazioni filtrabile per merchant, con commissione e guadagno riga per riga.
/me, /merchants, /stats, /transactions). Creare, modificare o disattivare merchant richiede sempre il Bearer con la API Key: dal portale non si puo' fare, e non e' un limite temporaneo. Non vengono mostrati i dati dei compratori (email, nome): al partner serve il conto, non l'anagrafica dei clienti dei suoi merchant.
La sessione scade dopo 30 minuti di inattivita'. Il secret non viene mai salvato nel browser.
GET /stats
Volumi, commissioni PayGlobe e guadagno del partner, per merchant e in totale. Gli stessi numeri del portale.
Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
from | date | YYYY-MM-DD, incluso. Default: primo del mese corrente |
to | date | YYYY-MM-DD, incluso. Default: oggi. Finestra massima 366 giorni |
curl "https://api.payglobe.it/paymentgw/partner/api/v1/stats?from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer pk_partner_xxx"
Response
{
"success": true,
"from": "2026-09-01",
"to": "2026-09-30",
"currency": "EUR",
"revenueSharePercent": 30.00,
"merchants": [
{
"merchantId": "soluzioniservizi",
"environment": "PRODUCTION",
"isActive": true,
"pricing": {
"defined": true,
"percent": 1.200, "fixed": 0.15, "notes": "listino personalizzato",
"tiers": [
{ "category": "MYBANK", "label": "MyBank", "percent": 0.250, "fixed": 0.15 },
{ "category": "PREPAID", "label": "Prepaid", "percent": 1.100, "fixed": 0.15 },
{ "category": "DEBIT", "label": "Debit", "percent": 1.100, "fixed": 0.15 },
{ "category": "CREDIT", "label": "Credit", "percent": 1.100, "fixed": 0.15 },
{ "category": "COMMERCIAL", "label": "Commercial", "percent": 2.300, "fixed": 0.15 },
{ "category": "EXTRA_EEA", "label": "Extra-EEA", "percent": 2.300, "fixed": 0.15 }
]
},
"transactionCount": 42,
"grossVolume": 3180.00,
"refundedAmount": 150.00,
"payglobeFees": 42.36,
"partnerEarnings": 12.71,
"byCategory": {
"DEBIT": { "transactionCount": 25, "grossVolume": 1900.00, "refundedAmount": 0.00, "payglobeFees": 24.65, "partnerEarnings": 7.40 },
"CREDIT": { "transactionCount": 12, "grossVolume": 980.00, "refundedAmount": 150.00, "payglobeFees": 12.58, "partnerEarnings": 3.77 },
"EXTRA_EEA": { "transactionCount": 3, "grossVolume": 200.00, "refundedAmount": 0.00, "payglobeFees": 5.05, "partnerEarnings": 1.52 },
"UNCLASSIFIED": { "transactionCount": 2, "grossVolume": 100.00, "refundedAmount": 0.00, "payglobeFees": 1.50, "partnerEarnings": 0.45 }
},
"unclassifiedCount": 2
}
],
"totals": {
"transactionCount": 42,
"grossVolume": 3180.00,
"refundedAmount": 150.00,
"payglobeFees": 42.36,
"partnerEarnings": 12.71
}
}
GET /transactions
Transazioni dei merchant del partner, in sola lettura. Senza dati del compratore.
Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
merchantId | string | Opzionale. Un merchant che non e' del partner risponde con lista vuota, come uno inesistente |
from / to | date | Come in /stats |
onlyMoneyMoved | boolean | true = solo incassate e rimborsate (quelle che contano nei totali). Default false |
page / size | int | Paginazione, size max 500, default 50. Ordinate dalla piu' recente |
Response
{
"success": true,
"total": 42, "page": 0, "size": 50,
"transactions": [
{
"transactionId": "3f0c9a2e-...",
"merchantId": "soluzioniservizi",
"createdAt": "2026-09-12T10:41:07+02:00",
"completedAt": "2026-09-12T10:41:52+02:00",
"amount": 75.00,
"refundedAmount": 0.00,
"paymentMethod": "CARD",
"status": "COMPLETED",
"statusFamily": "COMPLETED",
"orderId": "ORD-1187",
"description": "Ordine 1187",
"fee": 1.00,
"partnerEarning": 0.30
}
]
}
statusFamily vale COMPLETED, REFUNDED, AUTHORIZED, PENDING, FAILED, CANCELLED, DISPUTED: e' quella da usare nei conti. status e' lo stato grezzo del PSP (decine di valori) e cambia con l'integrazione.
Pricing e quota: come si calcola
| Commissione PayGlobe | importo × percent / 100 + fixed, per transazione, con la riga del listino della categoria della transazione. Il pricing lo imposta PayGlobe, il partner lo legge in /merchants e /stats (pricing.tiers) |
| Categorie | MYBANK · PREPAID · DEBIT · CREDIT · COMMERCIAL · EXTRA_EEA. Sono le righe con cui il listino viene contrattato. Le carte vengono classificate dal BIN (le prime sei cifre) con la tabella BIN degli schemi, al momento del pagamento; Extra-EEA vince sul prodotto (una carta di debito emessa fuori dallo Spazio Economico Europeo e' EXTRA_EEA, non DEBIT), che e' anche come classifica l'acquirer. MyBank si riconosce dal metodo di pagamento. Ogni transazione porta cardCategory e issuerCountry in /transactions |
| Ripiego | Le transazioni senza categoria (wallet e APM senza carta, carte di test, BIN non in tabella) e le categorie senza una riga dedicata prendono pricing.percent / pricing.fixed. In /stats compaiono in byCategory.UNCLASSIFIED e in unclassifiedCount: se sono tante fra le carte, il listino a fasce e' applicato solo in parte |
| Guadagno partner | commissione × revenueSharePercent / 100. La quota e' una percentuale fissa per partner, in /me |
| Quali transazioni | Solo quelle in cui i soldi si sono mossi: famiglie COMPLETED e REFUNDED. Preautorizzazioni, fallite, annullate e in corso non contano |
| Rimborsi | Esposti a parte, non sottratti dalla commissione: e' la convenzione degli acquirer |
| Pricing assente | Commissione zero e pricing.defined = false. Non e' un listino gratuito: e' un listino non ancora inserito, e il portale lo segnala |
| Storico | La commissione si calcola in lettura col pricing attuale: se il pricing cambia, cambiano anche i numeri dei mesi passati. Per un consuntivo definitivo, esportare a fine periodo |
GET /me
Ottieni informazioni sul partner autenticato.
Response
{
"success": true,
"partner": {
"id": 1,
"partnerCode": "GRUPPO_RETAIL",
"name": "Gruppo Retail SpA",
"role": "PARTNER",
"allowedServices": "[\"IGFS\",\"BANCOMAT_PAY\",\"PAYPAL\"]",
"maxMerchants": 100,
"revenueSharePercent": 30.00,
"apiCallCount": 1523
}
}
GET /merchants
Lista tutti i merchant del partner.
POST /merchants
Crea un nuovo merchant.
Request Body
| Parametro | Tipo | Descrizione |
|---|---|---|
merchantId * | string | ID univoco del merchant |
merchantName | string | Nome visualizzato |
environment | string | TEST o LIVE |
Il webhook lo imposta poi il merchant dalla propria dashboard. Sono accettati solo URL
http(s) che risolvono a un indirizzo pubblico: localhost,
reti private, 169.254.x.x e nomi che non risolvono vengono rifiutati con il motivo, e il
controllo si ripete prima di ogni invio. Dettagli in
partner.html.
GET /merchants/{merchantId}
Ottieni dettagli di un merchant.
PATCH /merchants/{merchantId}
Aggiorna configurazione (parziale).
DELETE /merchants/{merchantId}
Disattiva un merchant (soft delete).
GET /services
Lista servizi disponibili per il partner.
POST /merchants/{id}/services/{service}/enable
Abilita un servizio per un merchant.
POST /merchants/{id}/services/{service}/disable
Disabilita un servizio per un merchant.
PUT /merchants/{id}/services/{service}/config
Configura un servizio. I parametri variano per servizio.
baseUrl, merchantId, apiKey, tid, acquirerName
baseUrl deve essere un URL
https di un host N&TS (*.netsgroup.com,
*.netswgroup.it): a quell'indirizzo partono la apiKey IGFS e i dati
di pagamento del merchant. Qualunque altro valore viene rifiutato con HTTP 400
e il motivo nel campo error, senza modificare la configurazione.
idPg, idNegozio, merchantName, certificate, privateKey, mode
clientId, clientSecret, mode
merchantId, signatureKey, mode
Lista Servizi Disponibili
| Codice | Nome | Descrizione |
|---|---|---|
IGFS | IGFS/Nexi | Pagamenti carta di credito |
SHIFT4 | Shift4 | Pagamenti carta via Shift4 |
PAYPAL | PayPal | Pagamenti PayPal |
AMAZON_PAY | Amazon Pay | Pagamenti Amazon Pay |
BANCOMAT_PAY | BANCOMAT Pay | Pagamenti BANCOMAT Pay |
BIZUM | Bizum (Redsys) | Pagamento istantaneo conto-a-conto, solo Spagna |
SKRILL | Skrill (Quick Checkout) | Wallet Skrill; dalla stessa pagina anche carta, Neteller, Rapid Transfer, PaysafeCard |
ZONDA | Zonda CryptoPay | Pagamenti criptovalute |
SATISPAY | Satispay | Pagamenti Satispay |
Adapter di compatibilità
Oltre alle API PayGlobe native, due adapter permettono a un merchant di restare sul protocollo che già usa. Non sono servizi da abilitare qui: si configurano emettendo le credenziali dell'adapter e ripuntando la Base URL del client.
| Adapter | Per chi arriva da | Base URL | Documentazione |
|---|---|---|---|
| Mandala | Stripe (SDK backend + Stripe.js) | https://api.payglobe.it/mandala/v1 |
mandala |
| IGFS Adapter | IGFS diretto (N&TS/Nexi PGW REST) | https://api.payglobe.it/MONEYNET_CG_SERVICES |
igfs-adapter.html |
L'IGFS Adapter espone init, verify, capture,
reversal e refund in protocollo IGFS nativo, con la stessa
HTTP-Signature. Il client cambia solo Base URL, merId (max 16 caratteri)
e secret. auth diretto, selector, tokenizer e pay-by-mail
non sono ancora esposti.
Codici Errore
| HTTP | Descrizione |
|---|---|
400 | Parametri mancanti o non validi |
401 | API Key mancante o non valida |
403 | IP non autorizzato o servizio non consentito |
404 | Risorsa non trovata |
409 | Conflitto: ID già esistente, oppure Idempotency-Key riusata con un corpo diverso |
500 | Errore interno del server |
Ritentativi: Idempotency-Key
Su ogni chiamata che muove denaro — incasso, storno, annullo, addebito su
carta salvata — invia l'header Idempotency-Key con un valore
diverso per ogni operazione. Se ripeti la richiesta con la stessa
chiave, ricevi la risposta originale invece di eseguirla una seconda volta.
Se una chiamata fallisce senza un esito confermato, ritentala con la
stessa chiave: è l'unico modo di non decidere alla cieca.
Riusare una chiave con un corpo diverso è un 409. Le chiavi
restano valide 30 giorni.