Catalogue des points de terminaison
Opérations DEUNA publiées pour les commandes, paiements, utilisateurs, cartes, marchands, liens de paiement et abonnements, migrées depuis la référence précédente de l’API.
Sur cette page
Utilisez ce catalogue pour retrouver les opérations migrées depuis la précédente référence de l’API DEUNA. La matrice de migration représente chaque méthode et chaque chemin publiés une seule fois tout en excluant les autres routes de l’API Gateway.
Inventaire des endpoints publiés#
Cet inventaire est généré à partir de la configuration effective de l’API Gateway et limité par la matrice de migration vérifiée. Utilisez les filtres pour identifier qui doit appeler une opération, quel service en est responsable, quelle autorisation elle prend en charge et quels en-têtes la passerelle accepte ou transmet.
Le catalogue comprend uniquement les opérations du backend marchand et des applications clientes déjà présentes dans la référence publique précédente de l’API. Les opérations internes d’Admin, de gestion, de partenaires, de callback fournisseur et les autres opérations de la passerelle sont exclues.
Routes ci-dessous /transactions/webhooks/ reçoivent des événements de processeur à l'intérieur de DEUNA et ne sont pas des points de terminaison d'intégration marchand. Lorsqu'un fournisseur nécessite une configuration de rappel côté marchand, l'URL et les étapes de configuration se trouvent dans le guide de connexion de ce fournisseur — par exemple, le rappel de statut de paiement Stripe OXXO. Utilisez Webhooks DEUNA pour les notifications livrées à votre propre backend.
Généré à partir des opérations effectives de l’API Gateway mappées depuis la référence publique précédente.
Backend marchand · serveur à serveurÀ utiliser depuis un backend marchand de confiance pour les commandes, paiements et opérations.42
/cards/bin/{bin}Récupérer Bin
- Domaine
- Cards and vault
- Service responsable
- Card metadata
- Destiné à
- Backend marchand · serveur à serveur
/merchants/checkout/themesLister ou récupérer Themes
- Domaine
- Checkout
- Service responsable
- Checkout configuration
- Destiné à
- Backend marchand · serveur à serveur
/merchants/checkout/themesCréer Themes
- Domaine
- Checkout
- Service responsable
- Checkout configuration
- Destiné à
- Backend marchand · serveur à serveur
/merchants/checkout/themes/{theme_id}Supprimer Themes
- Domaine
- Checkout
- Service responsable
- Checkout configuration
- Destiné à
- Backend marchand · serveur à serveur
/merchants/checkout/themes/{theme_id}Mettre à jour Themes
- Domaine
- Checkout
- Service responsable
- Checkout configuration
- Destiné à
- Backend marchand · serveur à serveur
/merchants/ordersLister ou récupérer Orders
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/ordersCréer Orders
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/orders/{order_token}Récupérer Orders
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/orders/{order_token}Mettre à jour Orders
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/orders/{order_token}/expireExécuter Expire pour Orders
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/orders/{order_token}/payments-methodsLister ou récupérer Payments Methods
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/orders/{order_token}/transactions/verifyExécuter Verify pour Transactions
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/orders/{order_token}/voidExécuter Void pour Orders
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/transactions/orders/{order_token}/installmentsLister ou récupérer Installments
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/v2/merchants/orders/{order_token}/captureCapturer Payment
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/v2/merchants/orders/{order_token}/refundCréer Refund
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/v2/merchants/orders/purchaseCréer Payment
- Domaine
- Orders
- Service responsable
- Orders and checkout
- Destiné à
- Backend marchand · serveur à serveur
/merchants/payment-linksCréer Payment Links
- Domaine
- Payment links
- Service responsable
- Payment links
- Destiné à
- Backend marchand · serveur à serveur
/merchants/payment-links/{payment_link_id}Récupérer Payment Links
- Domaine
- Payment links
- Service responsable
- Payment links
- Destiné à
- Backend marchand · serveur à serveur
/merchants/payment-links/{payment_link_id}/ordersLister ou récupérer Orders
- Domaine
- Payment links
- Service responsable
- Payment links
- Destiné à
- Backend marchand · serveur à serveur
/merchants/payment-links/allLister ou récupérer All
- Domaine
- Payment links
- Service responsable
- Payment links
- Destiné à
- Backend marchand · serveur à serveur
/merchants/stores/payments-methodsLister ou récupérer Payments Methods
- Domaine
- Payments
- Service responsable
- Payments
- Destiné à
- Backend marchand · serveur à serveur
/transactions/payments-methodsLister ou récupérer Payments Methods
- Domaine
- Payments
- Service responsable
- Payments
- Destiné à
- Backend marchand · serveur à serveur
/merchants/installments/plans/{installment_plan_option_id}Récupérer Plans
- Domaine
- Subscriptions
- Service responsable
- Installments
- Destiné à
- Backend marchand · serveur à serveur
/subscriptionsLister ou récupérer Subscriptions
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptionsCréer Subscriptions
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}Récupérer Subscriptions
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}Mettre à jour Subscriptions
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}/cancelExécuter Cancel pour Subscriptions
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}/cardsMettre à jour Cards
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}/external-settlementCréer External Settlement
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}/historyLister ou récupérer History
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}/pauseExécuter Pause pour Subscriptions
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/{id}/resumeExécuter Resume pour Subscriptions
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/plansLister ou récupérer Plans
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/plansCréer Plans
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/plans/{id}Récupérer Plans
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/plans/{id}Mettre à jour Plans
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/plans/statusesLister ou récupérer Statuses
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/subscriptions/statusesLister ou récupérer Statuses
- Domaine
- Subscriptions
- Service responsable
- Subscriptions
- Destiné à
- Backend marchand · serveur à serveur
/users/authorizeExécuter Authorize pour Users
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Backend marchand · serveur à serveur
/users/external-authorizeCréer External Authorize
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Backend marchand · serveur à serveur
Application client · utilisateur vers serveurÀ utiliser dans les parcours Web ou mobiles avec l’identité et le contexte appareil indiqués.14
/users/{user_id}/cardsLister ou récupérer Cards
- Domaine
- Cards and vault
- Service responsable
- Payments
- Destiné à
- Application client · utilisateur vers serveur
/users/{user_id}/cards/{card_id}Supprimer Cards
- Domaine
- Cards and vault
- Service responsable
- Payments
- Destiné à
- Application client · utilisateur vers serveur
/users/{user_id}/cards/{card_id}Récupérer Cards
- Domaine
- Cards and vault
- Service responsable
- Payments
- Destiné à
- Application client · utilisateur vers serveur
/users/{user_id}/cards/{card_id}/set-as-defaultDéfinir la carte par défaut
- Domaine
- Cards and vault
- Service responsable
- Payments
- Destiné à
- Application client · utilisateur vers serveur
/v2/users/{user_id}/cardsCréer Cards
- Domaine
- Cards and vault
- Service responsable
- Payments
- Destiné à
- Application client · utilisateur vers serveur
/users/{user_id}/addressesLister ou récupérer Addresses
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/{user_id}/addressesCréer Addresses
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/{user_id}/addresses/{address_id}Supprimer Addresses
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/{user_id}/addresses/{address_id}Mettre à jour Addresses
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/loginExécuter Login pour Users
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/logoutExécuter Logout pour Users
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/meLister ou récupérer Me
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/registerExécuter Register pour Users
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
/users/request-codeExécuter Request Code pour Users
- Domaine
- Users and identity
- Service responsable
- Merchant management
- Destiné à
- Application client · utilisateur vers serveur
Points de terminaison d'intégration principaux#
Les opérations ci-dessous conservent les ancres stables utilisées dans les guides d'intégration et fournissent un contexte supplémentaire pour les flux de travail courants des marchands.
API des commandes#
Créer une commande
POST /merchants/orders
Crée facultativement une commande avant le paiement et renvoie le order_token utilisé par les widgets et les opérations de paiement DEUNA. Les nouvelles intégrations directes peuvent envoyer la commande en ligne à Purchase V2.
L'objet requis varie selon le type de commande : les commandes de paiement et d'abonnement nécessitent le tableau items, tandis que les commandes de compagnies aériennes nécessitent des informations sur la compagnie aérienne. Le contrat de base ne marque pas une propriété individuelle comme étant universellement requise. Voir le référence du champ d'article et guide de champ vertical.
Exemple 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))
}Obtenir une commande
GET /merchants/orders/{order_token}
Récupère l'état actuel de la commande, du paiement et du traitement pour un jeton de commande.
Exemple 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))
}Obtenir les méthodes de paiement pour une commande
GET /merchants/orders/{order_token}/payments-methods
Renvoie les méthodes de paiement disponibles pour une commande et une configuration de marchand spécifiques.
Exemple 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 de paiement#
Créer un paiement
POST /v2/merchants/orders/purchase
Crée et traite une commande en ligne dans le flux recommandé en un seul appel, ou traite un order_token existant lorsque la commande a été créée séparément. Consultez le guide détaillé de de demande de paiement.
Exemple 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))
}Effectuer un paiement
POST /v2/merchants/orders/{order_token}/capture
Effectue l'intégralité ou une partie d'un paiement autorisé. Appelez cette fonction uniquement depuis le backend du commerçant lorsque la connexion prend en charge une autorisation et un paiement séparés.
Exemple 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))
}Annuler une autorisation
POST /merchants/orders/{order_token}/void
Annule une autorisation éligible avant le paiement. Une requête synchrone réussie renvoie HTTP 204 No Content; les flux de traitement asynchrones doivent toujours être suivis jusqu'à leur statut de paiement final.
Exemple 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))
}Effectuer un remboursement
POST /v2/merchants/orders/{order_token}/refund
Crée un remboursement complet ou partiel pour un paiement effectué.
Exemple 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 pour les utilisateurs#
Ces opérations facultatives prennent en charge l’identité du client, les adresses réutilisables et les instruments de paiement enregistrés de manière sécurisée. Elles ne sont pas obsolètes, mais ne sont pas des prérequis pour Purchase V2. Les applications web et mobiles utilisent l’autorisation client. Les backends marchands de confiance utilisent l’autorisation indiquée pour chaque route dans l’inventaire ci-dessus.
Authentification
Enregistrer un utilisateur
POST /users/register
Crée facultativement un utilisateur qui peut s’authentifier et réutiliser en toute sécurité les données client et les moyens de paiement enregistrés.
Exemple 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))
}Demander un code OTP
POST /users/request-code
Envoie le code unique utilisé dans le flux d'authentification sans mot de passe.
Exemple 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))
}Se connecter avec un OTP
POST /users/login
Échange un code unique valide contre un jeton d'autorisation utilisateur.
Exemple 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))
}Authentification externe
POST /users/external-authorize
Authentifie un utilisateur via un flux d'identité géré par le commerçant.
Exemple 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))
}Utilisateurs
GET /users/me
Renvoie le profil de l’utilisateur authentifié lorsque l’intégration utilise des comptes clients facultatifs.
Exemple 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))
}Adresses
GET /users/{user_id}/addresses
Répertorie les adresses réutilisables associées à un utilisateur. Cette opération facultative n’est pas requise avant Purchase V2.
Exemple 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
Enregistre facultativement une adresse pour qu’un utilisateur authentifié puisse la réutiliser. Une adresse peut aussi être fournie en ligne dans une requête de paiement.
Exemple 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}
Met à jour une adresse réutilisable existante. L’inventaire indique l’autorisation Bearer et le contexte marchand requis par ces routes facultatives.
Exemple 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))
}Cartes
Stocke une carte
POST /v2/users/{user_id}/cards
Tokenise et stocke une ou plusieurs cartes pour une utilisation ultérieure. Le corps de la requête est un tableau JSON, même s’il ne contient qu’une seule carte. Appelez cet endpoint autorisé par le client avec le jeton Bearer de l’utilisateur et le contexte marchand affiché dans l’inventaire généré.
Les données brutes de la carte ne doivent pas transiter par les serveurs du marchand, sauf si celui-ci dispose du périmètre PCI requis. Consultez le flux de vaulting de l’API Cards pour connaître la structure de la requête, la limite de sécurité, la réponse de succès et les consignes de nouvelle tentative.
Exemple 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))
}Quelle route POST de carte dois-je utiliser ?
Seulement POST /v2/users/{user_id}/cards fait partie du contrat actuel de l'API Cards externe. Les autres routes POST qui peuvent apparaître dans les inventaires de Gateway servent à des fins de compatibilité ou de plateforme différentes ; ce ne sont pas trois façons interchangeables de créer une carte.
| Route | Ce qu'elle fait réellement | Guide d'intégration externe |
|---|---|---|
POST /v2/users/{user_id}/cards | Tokenise et stocke une ou plusieurs cartes client. Son corps de requête est un tableau, même lorsqu'il contient une seule carte, et la réponse renvoie des card_id values. | Utilisez cette route pour les nouvelles intégrations de l'API Cards autorisées par le client. |
POST /users/{user_id}/cards | Préserve le contrat de requête de carte unique v1 hérité pour les intégrations existantes. | Route de compatibilité ; elle est intentionnellement exclue du catalogue d'API externe actuel. Ne démarrez pas une nouvelle intégration avec elle à moins que DEUNA ne vous le demande explicitement. |
POST /users/{user_id}/cards/{card_id}/tokens | Ajoute un jeton spécifique au processeur ou un résultat de vérification à une carte qui existe déjà. Elle ne crée pas de carte client et ne remplace pas l'opération de /v2 vaulting. | Opération gérée par la plateforme ; elle est intentionnellement exclue de la documentation externe et ne doit pas être appelée directement à moins que DEUNA n'approuve le flux et le contrat. |
:::info Pourquoi une route peut exister sans apparaître ici L'inventaire de l'API Gateway inclut des routes de compatibilité et des routes opérées par la plateforme, ainsi que des contrats marchands publics. La présence dans la Gateway ne fait pas d'une opération une API externe prise en charge à elle seule. Le catalogue ne publie que les opérations qui font déjà partie de la référence externe ou qui ont l'approbation explicite de l'équipe propriétaire. :::
Lister les cartes enregistrées
GET /users/{user_id}/cards
Renvoie les cartes associées à l’utilisateur authentifié.
Exemple 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))
}Récupérer une carte enregistrée
GET /users/{user_id}/cards/{card_id}
Renvoie une carte associée à l’utilisateur authentifié.
Exemple 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))
}Définir une carte par défaut
PATCH /users/{user_id}/cards/{card_id}/set-as-default
Définit ou retire la carte enregistrée sélectionnée comme carte par défaut de l’utilisateur authentifié. Lorsqu’une carte devient la carte par défaut, DEUNA retire ce statut aux autres cartes de l’utilisateur. Consultez Définir une carte par défaut pour connaître le corps de requête facultatif, la réponse et les étapes de vérification.
Exemple 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))
}Obtenir les informations BIN de la carte
GET /cards/bin/{bin}
Retourne les informations sur le réseau, l'émetteur et le type de carte pour un BIN de six chiffres.
Exemple 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 du commerçant#
API Themes
L'API Themes est prise en charge et n'est pas dépréciée. Elle gère des configurations JSON nommées et délimitées par marchand qui peuvent être appliquées aux expériences DEUNA Checkout et Widget. Appelez ces opérations uniquement depuis un backend marchand de confiance avec la X-Api-Keyprivée ; le service Checkout Configuration déduit la portée marchand de ces informations d'identification.
Ressource Theme
| Champ | Retourné | Créer | Mise à jour | Descriptif |
|---|---|---|---|---|
id | Oui | Généré | Paramètre de chemin | UUID de thème généré par DEUNA. Utilisez-le comme theme_id pour la mise à jour et la suppression. |
name | Oui | Obligatoire | Optionnel lorsque config est fourni | Nom unique par marchand contenant des lettres, des chiffres ou des tirets bas. |
config | Oui | Obligatoire | Optionnel lorsque name est fourni | Objet JSON contenant la configuration du thème consommée par l'expérience Checkout ou Widget. |
L'opération de création rejette les noms en double et applique le nombre maximum de thèmes du service Checkout Configuration. La mise à jour et la suppression renvoient une erreur lorsque theme_id n'appartient pas à un thème existant dans la configuration du marchand.
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'opération de liste renvoie la même forme de ressource dans data[]. La création et la mise à jour renvoient le thème affecté. La suppression réussit avec une réponse vide.
:::note Schéma de configuration de thème
Le service valide que config est un objet JSON mais ne valide pas ses clés imbriquées. Utilisez la forme de configuration prise en charge par la version de Checkout ou de Widget qui consommera le thème. Ne supposez pas qu'un objet config de l'API Themes et un objet CustomStyle du SDK sont interchangeables.
:::
Méthodes de paiement
GET /merchants/stores/payments-methods
Récupère les méthodes de paiement activées pour un magasin. Indiquez le code du magasin requis. X-Store-Code header.
Exemple 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 des liens de paiement#
POST /merchants/payment-links
Crée un lien de paiement à partir d'une interface backend de marchand de confiance.
Exemple 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}
Récupère un lien de paiement et son état actuel.
Exemple 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
Répertorie les liens de paiement associés à la boutique du marchand authentifié.
Exemple 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
Répertorie les commandes associées à un lien de paiement.
Exemple 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))
}entrée complète de l’endpoint Guide d'intégration des liens de paiement Pour l'ensemble du processus.
API des abonnements#
Plans
GET /subscriptions/plans
Liste des plans d'abonnement disponibles pour le commerçant authentifié.
Exemple 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
Crée un plan d'abonnement.
Exemple 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))
}Abonnements
Liste des abonnements
GET /subscriptions
Retourne les abonnements disponibles pour le commerçant authentifié.
Exemple 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))
}Créer un abonnement
POST /subscriptions
Crée un abonnement à l'aide d'un plan et d'une méthode de paiement existants.
Exemple 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))
}Mettre à jour un abonnement
PATCH /subscriptions/{id}
Met à jour les attributs pris en charge d'un abonnement actif.
Exemple 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))
}