Sign in
Pagamenti e prelievi/Payment API

API Pagamenti

Crea e gestisci sessioni di pagamento in criptovaluta con l'API Pagamenti di 2328.io.

L'API Pagamenti consente di creare sessioni di pagamento, reindirizzare i clienti a un checkout ospitato e tracciare lo stato dei pagamenti.

Creare un pagamento

Crea una sessione di pagamento e restituisce un URL a cui il cliente può effettuare il pagamento.

Parametri della richiesta

CampoTipoObbligatorioDescrizioneValori
amountdecimalImporto del pagamento nella valuta, es. 100.00
currencystringValuta fiat (USD, EUR, RUB, …) o criptovaluta (USDT, TRX, BTC, …)
order_idstringIl tuo ID ordine, es. ORDER-12345 (fino a 128 caratteri)
to_currencystringnoCriptovaluta preselezionata
networkstringno*Codice di rete (obbligatorio se to_currency è impostato o se currency è una criptovaluta)
url_returnstringnoURL di reindirizzamento dopo il pagamento, es. https://your-site.com/return
url_successstringnoAlternativa a url_return
url_callbackstringURL per le notifiche webhook, es. https://your-site.com/webhook
invite_codestringnoCodice del referrer
fee_splitdecimalnoQuota della commissione del merchant trasferita al pagatore, 0–100 (%). 0 = il merchant paga interamente, 100 = il pagatore paga interamente. Sovrascrive l'impostazione a livello di progetto. Esempio: 30 (il pagatore copre il 30% della commissione).
price_markupdecimalnoMaggiorazione o sconto sull'importo della fattura, da −99 a 100 (%). Sovrascrive l'impostazione a livello di progetto. Esempio: 5 (+5%) o -10 (sconto del 10%).
descriptionstringnoDescrizione opzionale della fattura (max 200 caratteri). Mostrata al pagatore nella pagina di pagamento. Esempio: Premium plan — Order #12345.
ttl_secondsintnoDurata della fattura in secondi, da 300 (5 minuti) a 86400 (24 ore). Trascorso questo periodo la fattura scade e non può più essere pagata. Predefinito: 3600 (1 ora). Esempio: 3600.

Risposta

JSON
{
  "state": 0,
  "result": {
    "uuid": "abc123-def456-...",
    "order_id": "ORDER-12345",
    "amount": "100.00",
    "currency": "USD",
    "amount_usd": "100.00",
    "exchange_rate": null,
    "url": "https://2328.io/pay/abc123-def456-...",
    "tg_deeplink": "https://t.me/my2328bot?start=pay_abc123-def456-...",
    "expires_at": "2026-01-11T21:00:00Z",
    "created_at": "2026-01-11T20:00:00Z",
    "payer_currency": "USDT",
    "payer_amount": "100.50",
    "network": "TRX-TRC20",
    "address": "TXYZabc123...",
    "payment_status": "check",
    "txid": null,
    "payment_amount": null,
    "qr": "data:image/png;base64,iVBORw0..."
  }
}
  • Reindirizza il cliente a result.url per completare il pagamento.
  • tg_deeplink — deeplink al bot Telegram per il pagamento tramite Telegram MiniApp.
  • qr — codice QR codificato in Base64 (data URI) dell'indirizzo di deposito. Presente quando un indirizzo è già assegnato (quando network è impostato insieme a to_currency, o quando currency è una criptovaluta); altrimenti null.
  • txid, payment_amountnull finché il cliente non paga. Vengono valorizzati una volta che la transazione è rilevata on-chain. Resta in ascolto del webhook payment_status: paid per sapere quando.
  • exchange_ratenull se la conversione non è ancora applicabile (es. il tasso fiat → crypto non è stato bloccato). Viene valorizzato una volta scelta una valuta del pagatore.
Credentials
RequestPOST/v1/payment
curl -X POST https://api.2328.io/api/v1/payment \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Checkout ospitato, H2H e importi esatti di criptovaluta

Lo stesso endpoint supporta tre forme distinte di fattura. Scegline una deliberatamente; non mescolare la loro semantica di importo.

Checkout ospitato con scelta del pagatore

Invia amount, currency, order_id e url_callback, ma ometti to_currency e network. La risposta contiene result.url; address, qr e talvolta i campi del pagatore rimangono null fino a quando il pagatore non seleziona una direzione sulla pagina ospitata.

JSON
{
  "amount": "125.00",
  "currency": "EUR",
  "order_id": "ORDER-2026-1042",
  "url_callback": "https://merchant.example/webhooks/2328",
  "url_return": "https://merchant.example/orders/ORDER-2026-1042"
}

Fattura H2H a indirizzo diretto

Invia sia to_currency che network. 2328.io crea la fattura blockchain durante la chiamata API, quindi una risposta riuscita può essere resa all'interno del tuo checkout senza reindirizzare il cliente.

JSON
{
  "amount": "100.00",
  "currency": "USD",
  "to_currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1043",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Rendi questi valori esattamente come restituiti:

  • payer_amount e payer_currency — l'istruzione di pagamento;
  • network e address — l'unica destinazione per questa fattura;
  • qr — un URI di dati per lo stesso indirizzo;
  • expires_at — la scadenza della fattura;
  • url — un utile fallback ospitato quando il checkout personalizzato non può completarsi.

Non generare o sostituire mai un indirizzo, riutilizzare un indirizzo da un'altra fattura, o calcolare payer_amount da un prezzo di mercato pubblico. La risposta dell'API è autorevole.

Fattura per un importo preciso di criptovaluta

Metti la criptovaluta in currency quando la fattura stessa è denominata in criptovaluta:

JSON
{
  "amount": "25.000000",
  "currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1044",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Il valore richiesto di criptovaluta è conservato in payer_currency / payer_amount. Il servizio può anche mantenere internamente una valutazione in USD per contabilizzazione e campi di tasso; non sostituire l'istruzione esatta sulla criptovaluta con quella valutazione. Conserva le stringhe decimali restituite, inclusa la precisione finale.

Per una criptovaluta con una sola rete supportata, la rete può essere selezionata automaticamente. Fornire network esplicitamente è comunque consigliato per un'integrazione deterministica. Per asset multi-rete come le stablecoin, invialo sempre.

Idempotenza e tentativi

order_id è limitato al progetto commerciante autenticato e funge da chiave di idempotenza per la creazione. Se un pagamento esiste già, l'API restituisce quella sessione con state: 0.

Un nuovo tentativo con lo stesso order_id non significa not "aggiorna questa fattura." Campi come importo modificato, valuta, callback, markup, TTL o direzione potrebbero essere ignorati perché viene restituita la sessione esistente. Conserva la prima richiesta e respingi tentativi conflittuali nella tua applicazione.

Algoritmo di creazione raccomandato:

  1. Inserisci il tuo tentativo di pagamento locale e l'unico order_id in una singola transazione di database.
  2. Invia la richiesta API firmata.
  3. Conserva il uuid restituito e la risposta completa.
  4. Se il risultato HTTP viene perso, ripeti la stessa richiesta o interroga /v1/payment/info tramite order_id.
  5. Non creare mai un secondo ordine locale semplicemente perché la richiesta a monte è scaduta.

Casi limite di pagamento

SituazioneGestione corretta
address / qr è nullLa direzione del pagatore non è stata inizializzata. Reindirizzare a url, oppure creare una nuova fattura H2H correttamente specificata con un nuovo order_id.
Errore di convalida HTTP 400Leggere il campo a livello di errors; non riprovare con input invariato.
HTTP 429Riprovare con backoff esponenziale jitterato e mantenere lo stesso order_id.
HTTP 503 / direction_disabledAggiornare /v1/directions; nascondere temporaneamente la direzione o riprovare più tardi.
Timeout della richiesta del clientTrattare il risultato come sconosciuto. Interrogare tramite order_id prima di creare qualsiasi altra cosa.
underpaid_checkMemorizza l'evento parziale e attendi un ricarico o uno stato successivo. Non accreditare due volte quando arrivano altri txid.
underpaidStato finale di sotto-pagamento. Applica la tua politica di esecuzione/revisione manuale configurata all'importo effettivamente accreditato.
overpaidPagamento riuscito con fondi in eccesso. Esegui in modo idempotente e conserva gli importi effettivi per la riconciliazione/politica di rimborso.
aml_lockNon eseguire o rilasciare fondi automaticamente; indirizza al flusso di lavoro compliance/supporto.
cancelLa fattura è scaduta o è stata annullata. Non presumere che un trasferimento tardivo on-chain sia impossibile; riconcilia qualsiasi evento successivo con il supporto.

L'URL di ritorno del browser è solo per la navigazione. Un cliente può aprirlo senza pagare, chiuderlo dopo aver pagato o riaprirlo più tardi. Solo uno stato API/webhook verificato può completare l'ordine del commerciante.

Informazioni sul pagamento

Ottieni lo stato corrente del pagamento tramite uuid o order_id.

Parametri della richiesta

CampoTipoObbligatorioDescrizioneValori
uuidstringsì*UUID del pagamento (da result.uuid alla creazione)
order_idstringsì*Il tuo ID ordine

È richiesto almeno uno tra uuid e order_id.

RequestPOST/v1/payment/info
curl -X POST https://api.2328.io/api/v1/payment/info \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Elenco dei pagamenti

Ottieni un elenco di tutti i pagamenti con filtri e paginazione.

Parametri della richiesta

CampoTipoObbligatorioDescrizioneValori
statusstringnoFiltra per stato del pagamento (vedi References)
date_fromdatenoData di inizio (YYYY-MM-DD), es. 2026-01-01
date_todatenoData di fine (YYYY-MM-DD), es. 2026-01-31
pageintnoNumero di pagina, default 1
per_pageintnoElementi per pagina, default 15, max 5000
RequestPOST/v1/payment/list
curl -X POST https://api.2328.io/api/v1/payment/list \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.