Catalogo degli endpoint
Operazioni DEUNA pubblicate per ordini, pagamenti, utenti, carte, merchant, link di pagamento e abbonamenti, migrate dalla precedente documentazione dell’API.
In questa pagina
Usa questo catalogo per trovare le operazioni migrate dalla precedente documentazione dell’API DEUNA. La matrice di migrazione rappresenta una sola volta ogni metodo e percorso pubblicato, escludendo le altre rotte dell’API Gateway.
Inventario degli endpoint pubblicati#
Questo inventario viene generato dalla configurazione effettiva dell’API Gateway ed è limitato dalla matrice di migrazione verificata. Usa i filtri per identificare chi deve chiamare un’operazione, quale servizio ne è responsabile, quale autorizzazione supporta e quali header il gateway accetta o inoltra.
Il catalogo include solo le operazioni del backend del merchant e delle applicazioni cliente già presenti nella precedente documentazione pubblica dell’API. Sono escluse le operazioni interne di Admin, di gestione, dei partner, di callback dei provider e le altre operazioni del gateway.
Le rotte seguenti /transactions/webhooks/ ricevono eventi del processore all'interno di DEUNA e non sono endpoint di integrazione per il merchant. Quando un provider richiede la configurazione di una callback lato merchant, l'URL e i passaggi di configurazione si trovano nella guida di connessione di quel provider—ad esempio, la callback di stato del pagamento Stripe OXXO. Utilizza DEUNA webhooks per le notifiche consegnate al proprio backend.
Generato dalle operazioni effettive dell’API Gateway mappate dalla precedente documentazione pubblica.
Backend del merchant · server to serverDa usare da un backend affidabile del merchant per ordini, pagamenti e flussi operativi.42
/cards/bin/{bin}Recuperare Bin
- Dominio
- Cards and vault
- Servizio responsabile
- Card metadata
- Destinato a
- Backend del merchant · server to server
/merchants/checkout/themesElencare o recuperare Themes
- Dominio
- Checkout
- Servizio responsabile
- Checkout configuration
- Destinato a
- Backend del merchant · server to server
/merchants/checkout/themesCreare Themes
- Dominio
- Checkout
- Servizio responsabile
- Checkout configuration
- Destinato a
- Backend del merchant · server to server
/merchants/checkout/themes/{theme_id}Eliminare Themes
- Dominio
- Checkout
- Servizio responsabile
- Checkout configuration
- Destinato a
- Backend del merchant · server to server
/merchants/checkout/themes/{theme_id}Aggiornare Themes
- Dominio
- Checkout
- Servizio responsabile
- Checkout configuration
- Destinato a
- Backend del merchant · server to server
/merchants/ordersElencare o recuperare Orders
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/ordersCreare Orders
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/orders/{order_token}Recuperare Orders
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/orders/{order_token}Aggiornare Orders
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/orders/{order_token}/expireEseguire Expire per Orders
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/orders/{order_token}/payments-methodsElencare o recuperare Payments Methods
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/orders/{order_token}/transactions/verifyEseguire Verify per Transactions
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/orders/{order_token}/voidEseguire Void per Orders
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/transactions/orders/{order_token}/installmentsElencare o recuperare Installments
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/v2/merchants/orders/{order_token}/captureAcquisire Payment
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/v2/merchants/orders/{order_token}/refundCreare Refund
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/v2/merchants/orders/purchaseCreare Payment
- Dominio
- Orders
- Servizio responsabile
- Orders and checkout
- Destinato a
- Backend del merchant · server to server
/merchants/payment-linksCreare Payment Links
- Dominio
- Payment links
- Servizio responsabile
- Payment links
- Destinato a
- Backend del merchant · server to server
/merchants/payment-links/{payment_link_id}Recuperare Payment Links
- Dominio
- Payment links
- Servizio responsabile
- Payment links
- Destinato a
- Backend del merchant · server to server
/merchants/payment-links/{payment_link_id}/ordersElencare o recuperare Orders
- Dominio
- Payment links
- Servizio responsabile
- Payment links
- Destinato a
- Backend del merchant · server to server
/merchants/payment-links/allElencare o recuperare All
- Dominio
- Payment links
- Servizio responsabile
- Payment links
- Destinato a
- Backend del merchant · server to server
/merchants/stores/payments-methodsElencare o recuperare Payments Methods
- Dominio
- Payments
- Servizio responsabile
- Payments
- Destinato a
- Backend del merchant · server to server
/transactions/payments-methodsElencare o recuperare Payments Methods
- Dominio
- Payments
- Servizio responsabile
- Payments
- Destinato a
- Backend del merchant · server to server
/merchants/installments/plans/{installment_plan_option_id}Recuperare Plans
- Dominio
- Subscriptions
- Servizio responsabile
- Installments
- Destinato a
- Backend del merchant · server to server
/subscriptionsElencare o recuperare Subscriptions
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptionsCreare Subscriptions
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}Recuperare Subscriptions
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}Aggiornare Subscriptions
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}/cancelEseguire Cancel per Subscriptions
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}/cardsAggiornare Cards
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}/external-settlementCreare External Settlement
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}/historyElencare o recuperare History
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}/pauseEseguire Pause per Subscriptions
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/{id}/resumeEseguire Resume per Subscriptions
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/plansElencare o recuperare Plans
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/plansCreare Plans
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/plans/{id}Recuperare Plans
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/plans/{id}Aggiornare Plans
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/plans/statusesElencare o recuperare Statuses
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/subscriptions/statusesElencare o recuperare Statuses
- Dominio
- Subscriptions
- Servizio responsabile
- Subscriptions
- Destinato a
- Backend del merchant · server to server
/users/authorizeEseguire Authorize per Users
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Backend del merchant · server to server
/users/external-authorizeCreare External Authorize
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Backend del merchant · server to server
Applicazione cliente · utente verso serverDa usare nei flussi Web o mobili con l’identità e il contesto del dispositivo indicati.14
/users/{user_id}/cardsElencare o recuperare Cards
- Dominio
- Cards and vault
- Servizio responsabile
- Payments
- Destinato a
- Applicazione cliente · utente verso server
/users/{user_id}/cards/{card_id}Eliminare Cards
- Dominio
- Cards and vault
- Servizio responsabile
- Payments
- Destinato a
- Applicazione cliente · utente verso server
/users/{user_id}/cards/{card_id}Recuperare Cards
- Dominio
- Cards and vault
- Servizio responsabile
- Payments
- Destinato a
- Applicazione cliente · utente verso server
/users/{user_id}/cards/{card_id}/set-as-defaultImpostare la carta come predefinita
- Dominio
- Cards and vault
- Servizio responsabile
- Payments
- Destinato a
- Applicazione cliente · utente verso server
/v2/users/{user_id}/cardsCreare Cards
- Dominio
- Cards and vault
- Servizio responsabile
- Payments
- Destinato a
- Applicazione cliente · utente verso server
/users/{user_id}/addressesElencare o recuperare Addresses
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/{user_id}/addressesCreare Addresses
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/{user_id}/addresses/{address_id}Eliminare Addresses
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/{user_id}/addresses/{address_id}Aggiornare Addresses
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/loginEseguire Login per Users
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/logoutEseguire Logout per Users
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/meElencare o recuperare Me
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/registerEseguire Register per Users
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
/users/request-codeEseguire Request Code per Users
- Dominio
- Users and identity
- Servizio responsabile
- Merchant management
- Destinato a
- Applicazione cliente · utente verso server
Endpoint di integrazione principali#
Le operazioni seguenti mantengono gli ancoraggi stabili utilizzati dalle guide di integrazione e forniscono un contesto aggiuntivo per i flussi di lavoro dei commercianti più comuni.
API degli ordini#
Crea un ordine
POST /merchants/orders
Crea facoltativamente un ordine prima del pagamento e restituisce il order_token usato dai widget e dalle operazioni di pagamento DEUNA. Le nuove integrazioni dirette possono inviare l’ordine inline a Purchase V2.
L'oggetto richiesto varia in base al tipo di ordine: gli ordini di pagamento e abbonamenti richiedono l'array di articoli, mentre gli ordini di compagnie aeree richiedono informazioni sulla compagnia aerea. Il contratto di base non contrassegna la proprietà di un singolo articolo come universalmente richiesta. Vedi il riferimento del campo articolo e guida del campo verticale.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/merchants/orders' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Idempotency-Key: IDEMPOTENCY_KEY' \
--header 'X-Prediction-Id: PREDICTION_ID_VALUE' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/merchants/orders", {
method: "POST",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Idempotency-Key": "IDEMPOTENCY_KEY",
"X-Prediction-Id": "PREDICTION_ID_VALUE",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/merchants/orders",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Idempotency-Key": "IDEMPOTENCY_KEY",
"X-Prediction-Id": "PREDICTION_ID_VALUE",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/orders",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Idempotency-Key: IDEMPOTENCY_KEY",
"X-Prediction-Id: PREDICTION_ID_VALUE",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/orders"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Idempotency-Key", "IDEMPOTENCY_KEY")
.header("X-Prediction-Id", "PREDICTION_ID_VALUE")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/merchants/orders", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Idempotency-Key", "IDEMPOTENCY_KEY")
request.Header.Set("X-Prediction-Id", "PREDICTION_ID_VALUE")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Ottieni un ordine
GET /merchants/orders/{order_token}
Recupera lo stato corrente dell'ordine, del pagamento e dell'elaborazione per un token dell'ordine.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/merchants/orders/{order_token}' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'x-merchant-id: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/merchants/orders/{order_token}", {
method: "GET",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-merchant-id": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/orders/{order_token}",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-merchant-id": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/orders/{order_token}",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"Authorization: Bearer USER_ACCESS_TOKEN",
"x-merchant-id: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/orders/{order_token}"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("x-merchant-id", "MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/orders/{order_token}", nil)
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("x-merchant-id", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Ottieni i metodi di pagamento per un ordine
GET /merchants/orders/{order_token}/payments-methods
Restituisce i metodi di pagamento disponibili per un ordine specifico e una configurazione del commerciante.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/merchants/orders/{order_token}/payments-methods' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Store-Code: STORE_CODE'const response = await fetch("https://api.sandbox.deuna.io/merchants/orders/{order_token}/payments-methods", {
method: "GET",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Store-Code": "STORE_CODE"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/orders/{order_token}/payments-methods",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Store-Code": "STORE_CODE"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/orders/{order_token}/payments-methods",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Store-Code: STORE_CODE"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/orders/{order_token}/payments-methods"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Store-Code", "STORE_CODE")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/orders/{order_token}/payments-methods", nil)
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Store-Code", "STORE_CODE")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}API dei pagamenti#
Creare un pagamento
POST /v2/merchants/orders/purchase
Crea ed elabora un ordine inline nel flusso consigliato con un’unica chiamata oppure elabora un order_token esistente quando l’ordine è stato creato separatamente. Consulta la guida dettagliata alla guida alla richiesta di pagamento.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/v2/merchants/orders/purchase' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'Cookie: COOKIE_VALUE' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-ID: MERCHANT_ID' \
--header 'X-Prediction-Id: PREDICTION_ID_VALUE' \
--header 'X-Session-Id: SESSION_ID' \
--header 'X-Store-Code: STORE_CODE' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/v2/merchants/orders/purchase", {
method: "POST",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"Cookie": "COOKIE_VALUE",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-ID": "MERCHANT_ID",
"X-Prediction-Id": "PREDICTION_ID_VALUE",
"X-Session-Id": "SESSION_ID",
"X-Store-Code": "STORE_CODE",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/v2/merchants/orders/purchase",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"Cookie": "COOKIE_VALUE",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-ID": "MERCHANT_ID",
"X-Prediction-Id": "PREDICTION_ID_VALUE",
"X-Session-Id": "SESSION_ID",
"X-Store-Code": "STORE_CODE",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/v2/merchants/orders/purchase",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"Authorization: Bearer USER_ACCESS_TOKEN",
"Cookie: COOKIE_VALUE",
"X-Device-Id: DEVICE_ID",
"X-Merchant-ID: MERCHANT_ID",
"X-Prediction-Id: PREDICTION_ID_VALUE",
"X-Session-Id: SESSION_ID",
"X-Store-Code: STORE_CODE",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/v2/merchants/orders/purchase"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("Cookie", "COOKIE_VALUE")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-ID", "MERCHANT_ID")
.header("X-Prediction-Id", "PREDICTION_ID_VALUE")
.header("X-Session-Id", "SESSION_ID")
.header("X-Store-Code", "STORE_CODE")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/v2/merchants/orders/purchase", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("Cookie", "COOKIE_VALUE")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
request.Header.Set("X-Prediction-Id", "PREDICTION_ID_VALUE")
request.Header.Set("X-Session-Id", "SESSION_ID")
request.Header.Set("X-Store-Code", "STORE_CODE")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Cattura un pagamento
POST /v2/merchants/orders/{order_token}/capture
Cattura tutto o parte di un pagamento autorizzato. Chiamalo dal backend del commerciante solo quando la connessione supporta l'autorizzazione e l'acquisizione separate.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/capture' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/capture", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/capture",
headers={
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/capture",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/capture"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/capture", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Annullare un'autorizzazione
POST /merchants/orders/{order_token}/void
Rilascia un'autorizzazione idonea prima dell'acquisizione. Una richiesta sincrona riuscita restituisce HTTP 204 No Content; i flussi dei processori asincroni devono comunque essere tracciati fino al loro stato di pagamento finale.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/merchants/orders/{order_token}/void' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/merchants/orders/{order_token}/void", {
method: "POST",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/merchants/orders/{order_token}/void",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/orders/{order_token}/void",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/orders/{order_token}/void"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/merchants/orders/{order_token}/void", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Rimborsare un pagamento
POST /v2/merchants/orders/{order_token}/refund
Crea un rimborso totale o parziale per un pagamento elaborato.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/refund' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/refund", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/refund",
headers={
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/refund",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/refund"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/v2/merchants/orders/{order_token}/refund", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}API di rete utente#
Queste operazioni facoltative supportano l’identità del cliente, gli indirizzi riutilizzabili e gli strumenti di pagamento salvati in modo sicuro. Non sono deprecate, ma non sono prerequisiti per Purchase V2. Le applicazioni web e mobili usano l’autorizzazione del cliente. I backend merchant attendibili usano l’autorizzazione indicata per ogni percorso nell’inventario precedente.
Autenticazione
Registra un utente
POST /users/register
Crea facoltativamente un utente che può autenticarsi e riutilizzare in modo sicuro i dati cliente e i metodi di pagamento salvati.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/users/register' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-Id: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/users/register", {
method: "POST",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/users/register",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/register",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-Id: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/register"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-Id", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/users/register", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Richiedi un OTP
POST /users/request-code
Invia il codice monouso utilizzato dal flusso di autenticazione senza password.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/users/request-code' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-Id: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/users/request-code", {
method: "POST",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/users/request-code",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/request-code",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Device-Id: DEVICE_ID",
"X-Merchant-Id: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/request-code"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-Id", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/users/request-code", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Accedi con una OTP
POST /users/login
Scambia un codice monouso valido per un token di autorizzazione utente.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/users/login' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-Id: MERCHANT_ID' \
--header 'X-Qa-Api-Key: QA_API_KEY_VALUE' \
--header 'X-Recaptcha-Token: RECAPTCHA_TOKEN_VALUE' \
--header 'X-Session-ID: SESSION_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/users/login", {
method: "POST",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"X-Qa-Api-Key": "QA_API_KEY_VALUE",
"X-Recaptcha-Token": "RECAPTCHA_TOKEN_VALUE",
"X-Session-ID": "SESSION_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/users/login",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"X-Qa-Api-Key": "QA_API_KEY_VALUE",
"X-Recaptcha-Token": "RECAPTCHA_TOKEN_VALUE",
"X-Session-ID": "SESSION_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/login",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Device-Id: DEVICE_ID",
"X-Merchant-Id: MERCHANT_ID",
"X-Qa-Api-Key: QA_API_KEY_VALUE",
"X-Recaptcha-Token: RECAPTCHA_TOKEN_VALUE",
"X-Session-ID: SESSION_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/login"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-Id", "MERCHANT_ID")
.header("X-Qa-Api-Key", "QA_API_KEY_VALUE")
.header("X-Recaptcha-Token", "RECAPTCHA_TOKEN_VALUE")
.header("X-Session-ID", "SESSION_ID")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/users/login", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
request.Header.Set("X-Qa-Api-Key", "QA_API_KEY_VALUE")
request.Header.Set("X-Recaptcha-Token", "RECAPTCHA_TOKEN_VALUE")
request.Header.Set("X-Session-ID", "SESSION_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Autorizzazione esterna
POST /users/external-authorize
Autentica un utente tramite un flusso di identità gestito dal commerciante.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/users/external-authorize' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Auth-Message: AUTH_MESSAGE_VALUE' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-Id: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/users/external-authorize", {
method: "POST",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Auth-Message": "AUTH_MESSAGE_VALUE",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/users/external-authorize",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Auth-Message": "AUTH_MESSAGE_VALUE",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/external-authorize",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Auth-Message: AUTH_MESSAGE_VALUE",
"X-Device-Id: DEVICE_ID",
"X-Merchant-Id: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/external-authorize"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Auth-Message", "AUTH_MESSAGE_VALUE")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-Id", "MERCHANT_ID")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/users/external-authorize", nil)
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Auth-Message", "AUTH_MESSAGE_VALUE")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Utenti
GET /users/me
Restituisce il profilo dell’utente autenticato quando l’integrazione usa account cliente facoltativi.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/users/me' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-Id: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/users/me", {
method: "GET",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/users/me",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/me",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Device-Id: DEVICE_ID",
"X-Merchant-Id: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/me"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-Id", "MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/users/me", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Indirizzi
GET /users/{user_id}/addresses
Elenca gli indirizzi riutilizzabili associati a un utente. Questa operazione facoltativa non è richiesta prima di Purchase V2.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/users/{user_id}/addresses' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-Id: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/users/{user_id}/addresses", {
method: "GET",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/users/{user_id}/addresses",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/{user_id}/addresses",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Device-Id: DEVICE_ID",
"X-Merchant-Id: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/{user_id}/addresses"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-Id", "MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/users/{user_id}/addresses", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}POST /users/{user_id}/addresses
Salva facoltativamente un indirizzo per il riutilizzo da parte di un utente autenticato. Un indirizzo può anche essere fornito inline in una richiesta di pagamento.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/users/{user_id}/addresses' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-Id: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/users/{user_id}/addresses", {
method: "POST",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/users/{user_id}/addresses",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/{user_id}/addresses",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Device-Id: DEVICE_ID",
"X-Merchant-Id: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/{user_id}/addresses"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-Id", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/users/{user_id}/addresses", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}PATCH /users/{user_id}/addresses/{address_id}
Aggiorna un indirizzo riutilizzabile esistente. L’inventario mostra l’autorizzazione Bearer e il contesto merchant richiesti da questi percorsi facoltativi.
Esempio cURL
curl --request PATCH \
--url 'https://api.sandbox.deuna.io/users/{user_id}/addresses/{address_id}' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Device-Id: DEVICE_ID' \
--header 'X-Merchant-Id: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/users/{user_id}/addresses/{address_id}", {
method: "PATCH",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"PATCH",
"https://api.sandbox.deuna.io/users/{user_id}/addresses/{address_id}",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Device-Id": "DEVICE_ID",
"X-Merchant-Id": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/{user_id}/addresses/{address_id}",
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Device-Id: DEVICE_ID",
"X-Merchant-Id: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/{user_id}/addresses/{address_id}"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Device-Id", "DEVICE_ID")
.header("X-Merchant-Id", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("PATCH", "https://api.sandbox.deuna.io/users/{user_id}/addresses/{address_id}", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Device-Id", "DEVICE_ID")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Carte
Conserva una carta
POST /v2/users/{user_id}/cards
Tokenizza e archivia una o più carte per un utilizzo futuro. Il corpo della richiesta è un array JSON, anche quando contiene una sola carta. Chiama questo endpoint autorizzato dal cliente con il token Bearer dell’utente e il contesto merchant mostrato nell’inventario generato.
I dati grezzi della carta non devono transitare attraverso i server del merchant, a meno che il merchant non disponga dell’ambito PCI richiesto. Consulta il flusso di vaulting dell’API Cards per la struttura della richiesta, il limite di sicurezza, la risposta di successo e le indicazioni sui nuovi tentativi.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/v2/users/{user_id}/cards' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Merchant-ID: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/v2/users/{user_id}/cards", {
method: "POST",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/v2/users/{user_id}/cards",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/v2/users/{user_id}/cards",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/v2/users/{user_id}/cards"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Merchant-ID", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/v2/users/{user_id}/cards", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Quale rotta POST per le carte devo usare?
Solo POST /v2/users/{user_id}/cards fa parte del contratto API Cards esterno attuale. Le altre rotte POST che possono apparire negli inventari del Gateway servono scopi diversi di compatibilità o piattaforma; non sono tre modi intercambiabili per creare una carta.
| Rotta | Cosa fa effettivamente | Guida per l'integrazione esterna |
|---|---|---|
POST /v2/users/{user_id}/cards | Tokenizza e archivia una o più carte del cliente. Il suo corpo della richiesta è un array, anche quando contiene una sola carta, e la risposta restituisce token DEUNA riutilizzabili card_id values. | Usa questa rotta per le nuove integrazioni API Cards autorizzate dal cliente. |
POST /users/{user_id}/cards | Preserva il contratto di richiesta legacy v1 a singola carta per le integrazioni esistenti. | Rotta di compatibilità; è intenzionalmente esclusa dal catalogo API esterno attuale. Non avviare una nuova integrazione con essa a meno che DEUNA non ti indichi esplicitamente di farlo. |
POST /users/{user_id}/cards/{card_id}/tokens | Aggiunge un token specifico del processore o un risultato di verifica a una carta che esiste già. Non crea una carta del cliente e non sostituisce l'operazione di /v2 vaulting. | Operazione gestita dalla piattaforma; è intenzionalmente esclusa dalla documentazione esterna e non deve essere chiamata direttamente a meno che DEUNA non approvi il flusso e il contratto. |
:::info Perché una rotta può esistere senza apparire qui L'inventario dell'API Gateway include rotte di compatibilità e rotte gestite dalla piattaforma, oltre ai contratti pubblici per i merchant. La presenza nel Gateway di per sé non rende un'operazione un'API esterna supportata. Il catalogo pubblica solo le operazioni che fanno già parte del riferimento esterno o che hanno l'approvazione esplicita del team proprietario. :::
Elencare le carte memorizzate
GET /users/{user_id}/cards
Restituisce le carte associate all’utente autenticato.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/users/{user_id}/cards' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Merchant-ID: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/users/{user_id}/cards", {
method: "GET",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/users/{user_id}/cards",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/{user_id}/cards",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/{user_id}/cards"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Merchant-ID", "MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/users/{user_id}/cards", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Recuperare una carta memorizzata
GET /users/{user_id}/cards/{card_id}
Restituisce una carta associata all’utente autenticato.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN'const response = await fetch("https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}", {
method: "GET",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Impostare una carta come predefinita
PATCH /users/{user_id}/cards/{card_id}/set-as-default
Imposta o rimuove la carta salvata selezionata come predefinita dell’utente autenticato. Quando una carta diventa quella predefinita, DEUNA rimuove questo stato dalle altre carte dell’utente. Consulta Impostare una carta come predefinita per il corpo facoltativo della richiesta, la risposta e i passaggi di verifica.
Esempio cURL
curl --request PATCH \
--url 'https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}/set-as-default' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'X-Merchant-ID: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}/set-as-default", {
method: "PATCH",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"PATCH",
"https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}/set-as-default",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}/set-as-default",
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"X-Merchant-ID: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}/set-as-default"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("X-Merchant-ID", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("PATCH", "https://api.sandbox.deuna.io/users/{user_id}/cards/{card_id}/set-as-default", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Ottieni informazioni sul BIN della carta
GET /cards/bin/{bin}
Restituisce la rete della carta, l'emittente e i metadati del tipo per un BIN a sei cifre.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/cards/bin/{bin}' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-Id: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/cards/bin/{bin}", {
method: "GET",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-Id": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/cards/bin/{bin}",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-Id": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/cards/bin/{bin}",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-Id: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/cards/bin/{bin}"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-Id", "MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/cards/bin/{bin}", nil)
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}API commerciante#
API Themes
L'API Themes è supportata e non è deprecata. Gestisce configurazioni JSON con nome, in ambito merchant, che possono essere applicate alle esperienze DEUNA Checkout e Widget. Chiama queste operazioni solo da un backend merchant attendibile con la chiave privata X-Api-Key; il servizio Checkout Configuration deriva l'ambito merchant da quella credenziale.
Risorsa Tema
| Campo | Restituito | Creare | Aggiornamento | Descrizione |
|---|---|---|---|---|
id | Sì. | Generato | Parametro di percorso | UUID del tema generato da DEUNA. Usalo come theme_id per aggiornare ed eliminare. |
name | Sì. | Obbligatorio | Opzionale quando config viene fornito | Nome univoco per il merchant contenente lettere, numeri o underscore. |
config | Sì. | Obbligatorio | Opzionale quando name viene fornito | Oggetto JSON contenente la configurazione del tema utilizzata dall'esperienza Checkout o Widget. |
L'operazione di creazione rifiuta nomi duplicati e applica il numero massimo di temi del servizio Checkout Configuration. Aggiornamento ed eliminazione restituiscono un errore quando theme_id non appartiene a un tema esistente nella configurazione del merchant.
curl --request POST \
--url 'https://api.sandbox.deuna.io/merchants/checkout/themes' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"name": "checkout_default",
"config": {
"theme": {
"mainColor": "#1479A8",
"secondaryColor": "#111827",
"backgroundColor": "#FFFFFF"
}
}
}'const response = await fetch("https://api.sandbox.deuna.io/merchants/checkout/themes", {
method: "POST",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
"name": "checkout_default",
"config": {
"theme": {
"mainColor": "#1479A8",
"secondaryColor": "#111827",
"backgroundColor": "#FFFFFF"
}
}
})
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/merchants/checkout/themes",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"Content-Type": "application/json"
},
json={
"name": "checkout_default",
"config": {
"theme": {
"mainColor": "#1479A8",
"secondaryColor": "#111827",
"backgroundColor": "#FFFFFF"
}
}
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/checkout/themes",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode([
"name" => "checkout_default",
"config" => [
"theme" => [
"mainColor" => "#1479A8",
"secondaryColor" => "#111827",
"backgroundColor" => "#FFFFFF"
]
]
])
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/checkout/themes"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\n \"name\": \"checkout_default\",\n \"config\": {\n \"theme\": {\n \"mainColor\": \"#1479A8\",\n \"secondaryColor\": \"#111827\",\n \"backgroundColor\": \"#FFFFFF\"\n }\n }\n }"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/merchants/checkout/themes", strings.NewReader("{\n \"name\": \"checkout_default\",\n \"config\": {\n \"theme\": {\n \"mainColor\": \"#1479A8\",\n \"secondaryColor\": \"#111827\",\n \"backgroundColor\": \"#FFFFFF\"\n }\n }\n }"))
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}{
"id": "bfcabe59-48c9-4c36-b041-71597478689c",
"name": "checkout_default",
"config": {
"theme": {
"mainColor": "#1479A8",
"secondaryColor": "#111827",
"backgroundColor": "#FFFFFF"
}
}
}L'operazione di elenco restituisce la stessa struttura della risorsa in data[]. Creazione e aggiornamento restituiscono il tema interessato. Eliminazione ha successo con una risposta vuota.
:::nota Schema di configurazione del tema
Il servizio valida che config è un oggetto JSON ma non valida le sue chiavi annidate. Usa la struttura di configurazione supportata dalla versione di Checkout o Widget che utilizzerà il tema. Non assumere che un oggetto config dell'API Temi e un oggetto CustomStyle dell'SDK siano intercambiabili.
:::
Metodi di pagamento
GET /merchants/stores/payments-methods
Restituisce i metodi di pagamento abilitati per un negozio. Passa il codice negozio nella sezione richiesta X-Store-Code header.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/merchants/stores/payments-methods' \
--header 'X-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Idempotency-Key: IDEMPOTENCY_KEY' \
--header 'X-Merchant-Id: MERCHANT_ID' \
--header 'X-Prediction-Id: PREDICTION_ID_VALUE' \
--header 'X-Store-Code: STORE_CODE'const response = await fetch("https://api.sandbox.deuna.io/merchants/stores/payments-methods", {
method: "GET",
headers: {
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Idempotency-Key": "IDEMPOTENCY_KEY",
"X-Merchant-Id": "MERCHANT_ID",
"X-Prediction-Id": "PREDICTION_ID_VALUE",
"X-Store-Code": "STORE_CODE"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/stores/payments-methods",
headers={
"X-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Idempotency-Key": "IDEMPOTENCY_KEY",
"X-Merchant-Id": "MERCHANT_ID",
"X-Prediction-Id": "PREDICTION_ID_VALUE",
"X-Store-Code": "STORE_CODE"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/stores/payments-methods",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"X-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Idempotency-Key: IDEMPOTENCY_KEY",
"X-Merchant-Id: MERCHANT_ID",
"X-Prediction-Id: PREDICTION_ID_VALUE",
"X-Store-Code: STORE_CODE"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/stores/payments-methods"))
.header("X-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Idempotency-Key", "IDEMPOTENCY_KEY")
.header("X-Merchant-Id", "MERCHANT_ID")
.header("X-Prediction-Id", "PREDICTION_ID_VALUE")
.header("X-Store-Code", "STORE_CODE")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/stores/payments-methods", nil)
if err != nil { panic(err) }
request.Header.Set("X-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Idempotency-Key", "IDEMPOTENCY_KEY")
request.Header.Set("X-Merchant-Id", "MERCHANT_ID")
request.Header.Set("X-Prediction-Id", "PREDICTION_ID_VALUE")
request.Header.Set("X-Store-Code", "STORE_CODE")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}API dei collegamenti di pagamento#
POST /merchants/payment-links
Crea un collegamento di pagamento dal backend di un commerciante affidabile.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/merchants/payment-links' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/merchants/payment-links", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/merchants/payment-links",
headers={
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/payment-links",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/payment-links"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/merchants/payment-links", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}GET /merchants/payment-links/{payment_link_id}
Recupera un collegamento di pagamento e il suo stato attuale.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}'const response = await fetch("https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}", {
method: "GET"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}", nil)
if err != nil { panic(err) }
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}GET /merchants/payment-links/all
Elenca i link di pagamento associati al negozio del merchant autenticato.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/merchants/payment-links/all'const response = await fetch("https://api.sandbox.deuna.io/merchants/payment-links/all", {
method: "GET"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/payment-links/all",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/payment-links/all",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/payment-links/all"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/payment-links/all", nil)
if err != nil { panic(err) }
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}GET /merchants/payment-links/{payment_link_id}/orders
Elenca gli ordini associati a un link di pagamento.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}/orders'const response = await fetch("https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}/orders", {
method: "GET"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}/orders",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}/orders",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}/orders"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/merchants/payment-links/{payment_link_id}/orders", nil)
if err != nil { panic(err) }
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}voce completa dell’endpoint Guida all'integrazione dei link di pagamento per il flusso end-to-end.
API degli abbonamenti#
Piani
GET /subscriptions/plans
Elenca i piani di abbonamento disponibili per il commerciante autenticato.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/subscriptions/plans' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'x-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-ID: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/subscriptions/plans", {
method: "GET",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/subscriptions/plans",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/subscriptions/plans",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"x-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-ID: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/subscriptions/plans"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("x-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-ID", "MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/subscriptions/plans", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("x-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}POST /subscriptions/plans
Crea un piano di abbonamento.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/subscriptions/plans' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'x-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-ID: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/subscriptions/plans", {
method: "POST",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/subscriptions/plans",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/subscriptions/plans",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"x-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-ID: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/subscriptions/plans"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("x-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-ID", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/subscriptions/plans", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("x-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Abbonamenti
Elenco abbonamenti
GET /subscriptions
Restituisce gli abbonamenti disponibili al commerciante autenticato.
Esempio cURL
curl --request GET \
--url 'https://api.sandbox.deuna.io/subscriptions' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'x-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-ID: MERCHANT_ID'const response = await fetch("https://api.sandbox.deuna.io/subscriptions", {
method: "GET",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID"
}
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"GET",
"https://api.sandbox.deuna.io/subscriptions",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID"
},
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/subscriptions",
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"x-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-ID: MERCHANT_ID"
]
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/subscriptions"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("x-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-ID", "MERCHANT_ID")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.sandbox.deuna.io/subscriptions", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("x-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Crea un abbonamento
POST /subscriptions
Crea un abbonamento utilizzando un piano e un metodo di pagamento esistenti.
Esempio cURL
curl --request POST \
--url 'https://api.sandbox.deuna.io/subscriptions' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'x-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-ID: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/subscriptions", {
method: "POST",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/subscriptions",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/subscriptions",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"x-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-ID: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/subscriptions"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("x-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-ID", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/subscriptions", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("x-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Aggiorna un abbonamento
PATCH /subscriptions/{id}
Aggiorna gli attributi supportati di un abbonamento attivo.
Esempio cURL
curl --request PATCH \
--url 'https://api.sandbox.deuna.io/subscriptions/{id}' \
--header 'Authorization: Bearer USER_ACCESS_TOKEN' \
--header 'x-Api-Key: YOUR_PRIVATE_API_KEY' \
--header 'X-Merchant-ID: MERCHANT_ID' \
--header 'Content-Type: application/json' \
--data @request.jsonconst response = await fetch("https://api.sandbox.deuna.io/subscriptions/{id}", {
method: "PATCH",
headers: {
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
body: "@request.json"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"PATCH",
"https://api.sandbox.deuna.io/subscriptions/{id}",
headers={
"Authorization": "Bearer USER_ACCESS_TOKEN",
"x-Api-Key": "YOUR_PRIVATE_API_KEY",
"X-Merchant-ID": "MERCHANT_ID",
"Content-Type": "application/json"
},
data="@request.json",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/subscriptions/{id}",
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer USER_ACCESS_TOKEN",
"x-Api-Key: YOUR_PRIVATE_API_KEY",
"X-Merchant-ID: MERCHANT_ID",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => "@request.json"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/subscriptions/{id}"))
.header("Authorization", "Bearer USER_ACCESS_TOKEN")
.header("x-Api-Key", "YOUR_PRIVATE_API_KEY")
.header("X-Merchant-ID", "MERCHANT_ID")
.header("Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString("@request.json"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("PATCH", "https://api.sandbox.deuna.io/subscriptions/{id}", strings.NewReader("@request.json"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer USER_ACCESS_TOKEN")
request.Header.Set("x-Api-Key", "YOUR_PRIVATE_API_KEY")
request.Header.Set("X-Merchant-ID", "MERCHANT_ID")
request.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}