Passa al contenuto principale
In questa pagina
Esempio interattivoUsa dati di esempio e non effettua richieste API.
Produzione
Strategie di pagamento

Motore di raccomandazione

Definisci il percorso ordinato dei provider valutato per una regola corrispondente.

Acme LATAM · Produzione
ConfigurazioneMotore di raccomandazione
Attiva
01AdyenPercorso principale
02WorldpayPercorso alternativo
03StripePercorso alternativo
InstradamentoAdyen → Worldpay → Stripe

Autenticazione#

Tutti gli endpoint autenticano con un Chiave API inviato nel X-Api-Key header — questo è l'unico schema di autenticazione supportato. Il tuo commerciante è risolto dalla chiave API, così l'identificatore commerciante fa non non non lo so appaiono nell'URL.

HTTP
X-Api-Key: {{DEUNA's API Key}}
X-Idempotency-Key: {{UUID v4}}
Content-Type: application/json
IntestazioneObbligatorioDescrizione
X-Api-KeySì.La chiave API. Determina l'ambiente e la portata del commerciante.
Content-TypeSì.application/json.
X-Idempotency-KeyRaccomandazioniUna chiave unica che si genera per richiesta logica (un UUID funziona bene). Ripensando con la stessa chiave restituisce il risultato originale invece di applicare l'operazione due volte — inviarlo così retries di rete non creare regole duplicate o doppio conteggio un'azione.

Riepilogo del punto di vista#

MetodoSentieroOggetto
GET/routing/v1/rulesElenca tutte le regole (ordine priorità)
POST/routing/v1/rulesCreare una regola
GET/routing/v1/rules/{rule_id}Get a single rule by ID
PUT/routing/v1/rules/{rule_id}Aggiornare una regola (sostituire completamente)
PUT/routing/v1/rules/{rule_id}/reorderCambiare la priorità di una regola

Parametri del percorso:

ParametroTipoNote
rule_idintegerIdentificatore di regola numerico restituito da creare/list.

L'oggetto della Regola#

Una regola è la risorsa principale restituita e accettata da questi endpoint.

CampoTipoObbligatorioDescrizione
idintegerRisposta soloIdentificatore di regola assegnato dal server.
labelstringSì.Nome di regola leggibile dall'uomo.
data_typestringSì.Metodo famiglia questa regola si applica a: credit_card, debit_card, prepaid_card.
priorityintegerSì.Ordine di valutazione — prima corsa, prima vittoria partita (numeri non negativi)
statusenumeraSì.enabled, disabled, draft
is_defaultbooleanSì.Se true, questa è la regola di fallback quando nessun altro corrisponde. Una regola predefinita deve avere No. condizioni e non deve essere impostata ignore_next_rules.
triggerenumeraSì.payment, rejecto merchant_rule. Vedi Triggers.
conditionsarray<Condition>CondizionamentiCriteri di corrispondenza, E-combinato. Richiesto a meno che is_default = true.
membersarray<Member>CondizionamentiI fornitori hanno ordinato di tentare. Obbligatorio payment; richiesto (o children) per merchant_rule; vietato per reject.
childrenarray<Child>FacoltativoBracciali per bambini ponderati per test A/B (solo con trigger = merchant_rule).
ignore_next_rulesbooleanSì.Se true, smettere di valutare altre regole una volta che questo corrisponde. Proibita reject e per regole di default.
created_atstringa (RFC3339)Risposta soloTempi di creazione.

Triggers

triggerSignificatomemberschildrenignore_next_rulesis_default
paymentPercorso del pagamento ai fornitori elencati.Richiesto (≥1)Non consentitoConsentitoConsentito
rejectBloccate la transazione.Non consentitoNon consentitoNon consentitoNon consentito
merchant_ruleGruppo/branch: percorso attraverso i membri o bambini ponderati.Richiesto se non bambiniConsentitoConsentitoConsentito

L'oggetto Condizione#

Le condizioni definiscono ciò che una transazione deve corrispondere. Tutte le condizioni su una regola sono combinate con AND.

CampoTipoObbligatorioDescrizione
idintegerRisposta soloID stato assegnato dal server.
rule_optionobjectSì.Il campo da abbinare, per esempio { "id": 5, "label": "currency" }. Utilizzare un'opzione di regola disponibile al commerciante; id deve essere > 0.
operatorenumeraSì.Operatore di confronto. Deve essere valido per quella opzione di regola
operandstringCondizionamentiIl valore(i) da confrontare contro, sempre serializzato come una stringa. Formato dipende dall'operatore. Richiesto per ogni operatore eccetto is_present, che non richiede alcun operando.
operand_typestringNo.values (predefinito) o list (operare fa riferimento ad una lista personalizzata di UUID).
operand_configoggetto | nullCondizionamentiUsato quando operand_type = list: { "custom_list": { "field_to_evaluate": "email" } }.
metadata_field_namestringa | nullCondizionamentiObbligatorio quando rule_option.id = 16 (metadata). La chiave dei metadati per valutare.
metadata_field_typestringa | nullCondizionamentiObbligatorio quando rule_option.id = 16. Uno di text, numeric.
error_codestringRisposta soloImpostare quando l'elaborazione asincrona di una condizione (ad esempio l'importazione di elenco) non è riuscita.
error_messagestringRisposta soloDettaglio leggibile per l'uomo error_code.

Esempio — corrispondenza carte di marca Mastercard

JSON
{
  "rule_option": { "id": 3, "label": "branch" },
  "operator": "in",
  "operand": "mastercard"
}

Oggetto#

I membri sono i fornitori che utilizzano una regola corrispondente, tentati sort ordine (la cascata). Riferimenti di un membro uno fornitore — un fornitore di pagamento- Un'altra volta. fornitore di frodio un provider di autenticazione.

CampoTipoObbligatorioDescrizione
payment_provider_idintegerCondizionamentiID fornitore di pagamento DEUNA. Se necessario merchant_payment_provider_id Strumento e dati di connessione usati per elaborare il pagamento.
payment_provider_namestringRisposta soloNome del fornitore (ritorno riecheggiato).
merchant_payment_provider_idUUIDCondizionamentiLa connessione specifica del fornitore di Merchant. Se inviato, payment_provider_id deve essere anche essere inviato.
merchant_payment_provider_namestringRisposta soloNome di connessione (ritorno riecheggiato).
fraud_providerstringCondizionamentiNome del fornitore di frode/antifrode. Mutualmente esclusivo con i campi di pagamento- e di autenticazione-provider.
fraud_provider_idstringRisposta soloID fornitore di frode (risolto).
authentication_providerstringCondizionamentiNome del fornitore di autenticazione (ad es. UNICO_ID, CYBERSOURCE_3DS). Mutualmente esclusivo con i campi di pagamento- e frode-provider.
authentication_provider_idstringRisposta soloID fornitore di autenticazione (ritorno riecheggiato).
authentication_typeenumeraCondizionamentiIl metodo di autenticazione. Uno di 3ds_authentication, 3ds_data_only, unico_id. Obbligatorio quando il membro è un fornitore di autenticazione.
failoveroggetto | nullFacoltativoAutenticazione di backup utilizzata quando il fornitore primario non è disponibile: { "authentication_provider": "...", "authentication_type": "..." }. Valido solo solo sui membri del fornitore di autenticazione.
sortintegerSì.Ordine Cascade. Deve essere unico all'interno della regola.
strategyenumeraSì.Attualmente solo cascade.
capabilitiesarray<string>Sì.Capacità del fornitore da usare, ad esempio. ["3ds"]. Invia [] se non ne ha.
enabled3dsbooleanNo.Richiedi l'autenticazione 3DS su questo membro (creare payload).
post_authorizationbooleanSì.Solo un frode provider può impostare truee deve essere Ultimo ultimo membro sort.
shadow_modebooleanSì.Valutare il fornitore senza influenzare la rotta (prova sicura).
enabledbooleanRisposta soloSe il fornitore è attualmente disponibile per il commerciante.

Esempio — membro del fornitore di pagamento

JSON
{
  "sort": 1,
  "strategy": "cascade",
  "payment_provider_id": 45,
  "merchant_payment_provider_id": "6e4c651a-3e5f-403d-af9d-6a9e9299acb8",
  "capabilities": ["3ds"],
  "post_authorization": false,
  "shadow_mode": false
}

Esempio — membro del gruppo di frodi

JSON
{
  "sort": 1,
  "strategy": "cascade",
  "fraud_provider": "CYBERSOURCE",
  "capabilities": [],
  "post_authorization": false,
  "shadow_mode": false
}

Esempio — membro del fornitore di autenticazione (con failover)

JSON
{
  "sort": 1,
  "strategy": "cascade",
  "authentication_provider": "CYBERSOURCE_3DS",
  "authentication_type": "3ds_authentication",
  "failover": {
    "authentication_provider": "CYBERSOURCE_3DS",
    "authentication_type": "3ds_data_only"
  },
  "capabilities": [],
  "shadow_mode": false
}

Test A/B — traffico diviso tra due percorsi#

Al test A/B, aggiungere due percorsi a una regola (come children) e dare a ciascuno una percentuale weight. Il motore invia quella parte delle transazioni corrispondenti a ogni percorso — ad esempio. 70% sulla Route A, 30% sulla Route B — così potete paragonarli sul traffico dal vivo.

CampoTipoObbligatorioDescrizione
weightintegerSì.Percentuale di traffico corrispondente inviato a questo percorso. I pesi delle due rotte devono essere sommati 100.
membersarray<Member>Sì.Il fornitore(i) per questo percorso.

Regole:

  • Esattamente. Due routes.
  • weight i valori devono essere sommati 100.
  • La regola deve essere impostata ignore_next_rules: true.
  • Assegnazione appiccicoso per transaction_id (una transazione ottiene sempre la stessa rotta), e la rotta che corre è riecheggiata nel /triggers response.

Esempio: 70/30 spaccato

JSON
{
  "label": "A/B test — MXN cards",
  "ignore_next_rules": true,
  "conditions": [
    { "rule_option": { "id": 5, "label": "currency" }, "operator": "in", "operand": "MXN" }
  ],
  "children": [
    {
      "weight": 70,
      "members": [
        { "sort": 1, "strategy": "cascade", "payment_provider_id": 45, "merchant_payment_provider_id": "6e4c651a-3e5f-403d-af9d-6a9e9299acb8" }
      ]
    },
    {
      "weight": 30,
      "members": [
        { "sort": 1, "strategy": "cascade", "payment_provider_id": 52, "merchant_payment_provider_id": "8b3d7c90-1a2b-4c3d-9e0f-5a6b7c8d9e01" }
      ]
    }
  ]
}

Creare una regola#

POST /routing/v1/rules

L'esempio qui sotto crea un merchant_rule per le carte di credito Mastercard in MXN, effettua un controllo delle frodi, e poi i rami da fraud_risk: blocco highe via medium/low a Cybersource.

cURL

curl -X POST 'https://api.sandbox.deuna.io/routing/v1/rules' \
  -H 'X-Api-Key: {{API KEY}}' \
  -H 'X-Idempotency-Key: b3f1c2d4-9a8e-4c11-bb77-2e5f9c74a6b1' \
  -H 'Content-Type: application/json' \
  -d '{
    "label": "MX Mastercard — Cybersource",
    "priority": 2,
    "status": "enabled",
    "trigger": "merchant_rule",
    "is_default": false,
    "data_type": "credit_card",
    "ignore_next_rules": true,
    "conditions": [
      { "rule_option": { "id": 3, "label": "branch" }, "operator": "in", "operand": "mastercard" },
      { "rule_option": { "id": 5, "label": "currency" }, "operator": "in", "operand": "MXN" }
    ],
    "members": [
      { "sort": 1, "strategy": "cascade", "fraud_provider": "CYBERSOURCE" }
    ],
    "children": [
      { "conditions": [ { "rule_option": { "id": 15 }, "operator": "eq", "operand": "high" } ], "members": [] },
      { "conditions": [ { "rule_option": { "id": 15 }, "operator": "eq", "operand": "medium" } ],
        "members": [ { "sort": 1, "strategy": "cascade", "payment_provider_id": 45, "merchant_payment_provider_id": "6e4c651a-3e5f-403d-af9d-6a9e9299acb8", "capabilities": ["3ds"], "enabled3ds": false } ] },
      { "conditions": [ { "rule_option": { "id": 15 }, "operator": "eq", "operand": "low" } ],
        "members": [ { "sort": 1, "strategy": "cascade", "payment_provider_id": 45, "merchant_payment_provider_id": "6e4c651a-3e5f-403d-af9d-6a9e9299acb8", "capabilities": ["3ds"], "enabled3ds": false } ] }
    ]
  }'

Restituisce l’ordine elaborato con 201

JSON
{
  "id": 21866,
  "label": "MX Mastercard — Cybersource",
  "data_type": "credit_card",
  "priority": 2,
  "status": "enabled",
  "is_default": false,
  "trigger": "merchant_rule",
  "conditions": [
    {
      "id": 44264,
      "rule_option": { "id": 3, "label": "branch" },
      "operator": "in",
      "operand_config": null,
      "operand": "mastercard",
      "operand_type": "values",
      "metadata_field_name": null,
      "metadata_field_type": null,
      "error_code": "",
      "error_message": ""
    },
    {
      "id": 44265,
      "rule_option": { "id": 5, "label": "currency" },
      "operator": "in",
      "operand": "MXN",
      "operand_type": "values"
    }
  ],
  "members": [
    {
      "payment_provider_name": null,
      "merchant_payment_provider_name": null,
      "fraud_provider": "CYBERSOURCE",
      "sort": 1,
      "capabilities": [],
      "strategy": "cascade",
      "post_authorization": false,
      "shadow_mode": false
    }
  ],
  "ignore_next_rules": true,
  "created_at": "2026-07-08T01:07:29.439794Z"
}

Get a rule by ID#

GET /routing/v1/rules/{rule_id}

Restituisce una singola regola, inclusa la sua conditions, members e qualsiasi children. rule_id è l'identificatore numerico.

cURL

curl 'https://api.sandbox.deuna.io/routing/v1/rules/21866' \
  -H 'X-Api-Key: {{API KEY}}'

Restituisce l’ordine elaborato con 200

JSON
{
  "id": 21866,
  "label": "MX Mastercard — Cybersource",
  "data_type": "credit_card",
  "priority": 2,
  "status": "enabled",
  "is_default": false,
  "trigger": "merchant_rule",
  "conditions": [
    {
      "id": 44269,
      "rule_option": { "id": 3, "label": "branch" },
      "operator": "in",
      "operand": "mastercard",
      "operand_type": "values"
    },
    {
      "id": 44270,
      "rule_option": { "id": 5, "label": "currency" },
      "operator": "in",
      "operand": "MXN",
      "operand_type": "values"
    }
  ],
  "members": [
    {
      "fraud_provider_id": "3",
      "fraud_provider": "CYBERSOURCE",
      "sort": 1,
      "capabilities": [],
      "enabled": true,
      "strategy": "cascade",
      "post_authorization": false,
      "shadow_mode": false
    }
  ],
  "ignore_next_rules": true,
  "created_at": "2026-07-08T01:07:29.439794Z",
  "children": [
    {
      "conditions": [
        { "id": 44271, "rule_option": { "id": 15, "label": "fraud_risk" }, "operator": "eq", "operand": "high", "operand_type": "values" }
      ],
      "members": [],
      "ignore_next_rules": true
    },
    {
      "conditions": [
        { "id": 44272, "rule_option": { "id": 15, "label": "fraud_risk" }, "operator": "eq", "operand": "medium", "operand_type": "values" }
      ],
      "members": [
        {
          "payment_provider_id": 45,
          "payment_provider_name": "cybersource",
          "merchant_payment_provider_id": "6e4c651a-3e5f-403d-af9d-6a9e9299acb8",
          "merchant_payment_provider_name": "Cybersource MX",
          "sort": 1,
          "capabilities": ["3ds"],
          "enabled": true,
          "strategy": "cascade",
          "post_authorization": false,
          "shadow_mode": false
        }
      ],
      "ignore_next_rules": true
    }
  ]
}

Errori: PAYROU-NOT_FOUND (404) se la regola non esiste; PAYROU-FORBIDDEN (403) se non è accesibile; PAYROU-INVALID_PATH_PARAM (400) se rule_id non è un intero valido.


Regole di elenco#

GET /routing/v1/rules

Restituisce regole per il vostro commerciante in ordine prioritario. I risultati sono impaginato con un cursore opaco.

Param di queryTipoDescrizione
limitintegerFacoltativo. Dimensioni pagina. Predefinito 50, massimo 200.
cursorstringFacoltativo. cursore Opaque da una risposta precedente pagination.next_cursor. Omit per la prima pagina.
payment_provider_idintegerFacoltativo. Restituzione regole che fanno riferimento a questo fornitore di pagamento.

La risposta avvolge le regole in un pagination oggetto. Continua a chiedere con next_cursor mentre has_more è true.

pagination campoTipoDescrizione
next_cursorstringa | nullCursore per la pagina successiva, o null nell'ultima pagina.
has_morebooleantrue se sono disponibili più regole.
limitintegerLa dimensione della pagina che è stata applicata.

cURL

curl 'https://api.sandbox.deuna.io/routing/v1/rules?limit=50' \
  -H 'X-Api-Key: {{API KEY}}'

Restituisce l’ordine elaborato con 200

JSON
{
  "merchant_id": "87dd2c00-1f7a-44aa-9e05-34330bab73cc",
  "pagination": {
    "next_cursor": "eyJwcmlvcml0eSI6M30",
    "has_more": true,
    "limit": 50
  },
  "rules": [
    {
      "id": 21873,
      "label": "MX Mastercard — Cybersource",
      "data_type": "credit_card",
      "priority": 2,
      "status": "enabled",
      "is_default": false,
      "trigger": "payment",
      "conditions": [
        { "id": 44274, "rule_option": { "id": 3, "label": "branch" }, "operator": "in", "operand": "mastercard", "operand_type": "values" }
      ],
      "members": [
        {
          "payment_provider_id": 45,
          "payment_provider_name": "cybersource",
          "merchant_payment_provider_id": "6e4c651a-3e5f-403d-af9d-6a9e9299acb8",
          "merchant_payment_provider_name": "Cybersource MX",
          "sort": 1,
          "capabilities": ["3ds"],
          "enabled": true,
          "strategy": "cascade",
          "post_authorization": false,
          "shadow_mode": false
        }
      ],
      "ignore_next_rules": true,
      "created_at": "2026-07-08T01:09:49.553614Z"
    }
  ]
}

Aggiornare una regola#

PUT /routing/v1/rules/{rule_id}

Sostituto completo della regola. Inviare il corpo regola completo — la stessa forma di creare — compreso id e created_at. Uso comune: flip status tra enabled e disabled (questo è il modo in cui "ritire" una regola invece di eliminare).

cURL — disabilitare una regola

curl -X PUT 'https://api.sandbox.deuna.io/routing/v1/rules/21866' \
  -H 'X-Api-Key: {{API KEY}}' \
  -H 'X-Idempotency-Key: 7c2e5a19-4b8d-4f10-9a3c-1d2e3f4a5b6c' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": 21866,
    "created_at": "2026-07-08T01:07:29.439794Z",
    "label": "MX Mastercard — Cybersource",
    "priority": 2,
    "status": "disabled",
    "trigger": "merchant_rule",
    "is_default": false,
    "data_type": "credit_card",
    "ignore_next_rules": true,
    "conditions": [
      { "id": 44264, "rule_option": { "id": 3, "label": "branch" }, "operator": "in", "operand": "mastercard", "operand_type": "values" },
      { "id": 44265, "rule_option": { "id": 5, "label": "currency" }, "operator": "in", "operand": "MXN", "operand_type": "values" }
    ],
    "members": [
      { "sort": 1, "strategy": "cascade", "fraud_provider": "CYBERSOURCE", "capabilities": [], "post_authorization": false, "shadow_mode": false }
    ]
  }'

Restituisce l’ordine elaborato con 200

Restituisce la regola aggiornata con status Ora disabled. Nota: stato ids sono ristampati su aggiornamento.


Cambiare la priorità di una regola (riordine)#

PUT /routing/v1/rules/{rule_id}/reorder

Sposta una regola in una nuova priorità. Altre regole sono ri-sequenziate di conseguenza.

cURL

curl -X PUT 'https://api.sandbox.deuna.io/routing/v1/rules/21873/reorder' \
  -H 'X-Api-Key: sk_sandbox_9f8b2c1a7d4e60b3' \
  -H 'Content-Type: application/json' \
  -d '{ "priority": 2 }'
CampoTipoObbligatorioConstraente
priorityintegerSì.Non-negative integer

Restituisce l’ordine elaborato con 200

JSON
{ "priority": 2 }

Errori: PAYROU-VALIDATION (400) con errors[].code = PRIORITY_OUT_OF_RANGE se priority non è un intero non negativo.


Validazioni#

Creare e aggiornare eseguire questi controlli. Qualsiasi errore restituisce HTTP 400 con il codice di alto livello PAYROU-VALIDATION e una voce per campo offensivo in errors[] (v. Errori per la busta e il catalogo completo di codice a livello di campo).

Livello di regola

  • status deve essere uno di enabled, disabled, draft, process-in-background.
  • trigger deve essere uno di payment, reject, merchant_rule.
  • trigger = payment → almeno un membro; nessun bambino.
  • trigger = reject → nessun membro, nessun bambino, ignore_next_rules deve essere falso, is_default deve essere falso.
  • trigger = merchant_rule → almeno un membro o almeno un bambino.
  • is_default = true → nessuna condizione e ignore_next_rules deve essere falso.
  • is_default = false → almeno una condizione.
  • priority deve essere > 0 e ≤ 1000.

Condizioni

  • rule_option.id richiesto (> 0); operand richiesto (non-vuoto).
  • operator deve essere valido per quella opzione di regola (vedi catalogo).
  • A rule_option può apparire solo una volta per regola (escluso metadata).
  • per metadata (id 16): metadata_field_name e metadata_field_type richiesto; il tipo deve essere text o numeric.
  • per operand_type = list: operand deve essere una lista valida UUID che esiste.

Membri

  • Ogni membro deve fare riferimento esattamente ad un tipo di fornitore: pagamento, pagamento commerciante, frode o autenticazione.
  • I tipi di fornitori non possono essere mescolati su un membro.
  • Se merchant_payment_provider_id è presente, payment_provider_id deve essere presente anche.
  • I membri dell'autenticazione richiedono authentication_type (uno di 3ds_authentication, 3ds_data_only, unico_id).
  • failover è valido solo solo sui membri dell'autenticazione; i suoi authentication_type deve essere anche un valore valido.
  • sort deve essere unico all'interno della regola.
  • Un fornitore può apparire solo una volta per regola.
  • strategy deve essere cascade.
  • post_authorization = true solo per i fornitori di frodi, e quel membro deve essere Ultimo ultimo di sort.

Livello di servizio (controllato contro la configurazione del commerciante)

  • L'opzione di regola di riferimento deve esistere e sostenere l'operatore dato.
  • Il fornitore di pagamento/pagamento/frode/autenticazione deve essere abilitato per il commerciante.
  • merchant_payment_provider_id deve appartenere al dato payment_provider_id.

Errori#

Busta di errore

Ogni risposta di errore utilizza la stessa forma JSON:

JSON
{
  "code": "PAYROU-VALIDATION",
  "message": "One or more fields failed validation.",
  "request_id": "req_01J9Z8K7QF3M2N4P5R6S7T8U9V",
  "errors": [
    {
      "field": "members",
      "code": "MEMBERS_REQUIRED",
      "message": "At least one member is required when trigger is 'payment'."
    }
  ]
}
CampoTipoDescrizione
codestringCodice di alto livello stabile e leggibile dalla macchina. Branch su questo, mai on message.
messagestringRiepilogo leggibile dall'uomo. Può essere riparlato o localizzato — non lo parse.
request_idstringUnico per risposta e anche tornato nel X-Request-Id intestazione di risposta (su successo e errore). Citarlo in qualsiasi richiesta di supporto.
errorsarrayPresente solo per PAYROU-VALIDATION. Una voce per campo offensivo.
errors[].fieldstringPercorso sul campo, utilizzando notazione punti/freschetti — ad esempio. priority, conditions[1].operand, members[0].sort.
errors[].codestringCodice di livello del campo stabile (vedere codici di convalida).
errors[].messagestringDettaglio leggibile dall'uomo. Non fare la parsa.

Invia sempre un messaggio X-Idempotency-Key su scritture. Riprodurre la stessa chiave restituisce la risposta originale; riutilizzare una chiave con una diverso ritorno del corpo 409 PAYROU-CONFLICT.

Codici di stato HTTP

StatoSignificato
200 / 201Success.
400La richiesta è invalida — la convalida non è riuscita, malformata JSON, o i param difettosi di percorso/query.
401Autenticazione fallita — X-Api-Key manca o non è valido.
403Autorizzazione fallito — la chiave è valida ma non è consentito accedere a questo commerciante / risorse.
404La regola o una risorsa di riferimento non esiste.
409Conflitto — il riutilizzo chiave di idempotency con un corpo diverso, o un aggiornamento concomitante.
429Limite di tasso superiore — riprovazione dopo Retry-After header.
500Errore del server inaspettato.
503Una dipendenza a valle è temporaneamente non disponibile — sicuro da riprovare con il backoff.

Codici di livello superiore

CodiceHTTPQuando
PAYROU-VALIDATION400Uno o più campi non sono riusciti a convalidare. Dettagli in errors[].
PAYROU-MALFORMED_JSON400Il corpo di richiesta non è valido JSON.
PAYROU-INVALID_PATH_PARAM400Un parametro del percorso è il tipo/formato sbagliato (ad esempio non integer) rule_id).
PAYROU-INVALID_QUERY_PARAM400Un parametro di query è non valido (ad es. limit fuori portata, malformato cursor).
PAYROU-UNAUTHENTICATED401Mancante o non valida chiave API.
PAYROU-FORBIDDEN403Chiave valida, ma non portata a questo commerciante / risorse.
PAYROU-NOT_FOUND404Regola o risorsa di riferimento non trovata.
PAYROU-CONFLICT409Riutilizzo chiave di Idempotency con un carico di pagamento diverso, o modifica concomitante.
PAYROU-RATE_LIMITED429Troppe richieste.
PAYROU-INTERNAL500Errore del server inaspettato.
PAYROU-UPSTREAM_UNAVAILABLE503Una dipendenza a valle non è temporaneamente disponibile.

Codici di convalida

Ritornato dentro errors[] quando il codice di primo livello è PAYROU-VALIDATION. Ognuno è stabile e sicuro da ramificarsi.

Livello di regola

codeTipico fieldCausa
INVALID_STATUSstatusNon uno di enabled, disabled, draft, process-in-background.
INVALID_TRIGGERtriggerNon uno di payment, reject, merchant_rule.
PRIORITY_OUT_OF_RANGEpriorityNon trascurabile 1 e 1000 (coperte entrambe) ≤ 0 e > 1000).
MEMBERS_REQUIREDmemberstrigger = payment senza membri.
MEMBERS_OR_CHILDREN_REQUIREDmemberstrigger = merchant_rule con né membri né figli.
CONDITIONS_REQUIREDconditionsRegola non di default senza condizioni.
TRIGGER_CANNOT_BE_DEFAULTis_defaultreject regola con is_default = true.
TRIGGER_CANNOT_HAVE_MEMBERSmembersreject governare con i membri.
TRIGGER_CANNOT_HAVE_CHILDRENchildrenpayment/reject governare con i bambini.
TRIGGER_CANNOT_IGNORE_NEXT_RULESignore_next_rulesreject regola con ignore_next_rules = true.
DEFAULT_RULE_CANNOT_HAVE_CONDITIONSconditionsRegola di default con le condizioni.
DEFAULT_RULE_CANNOT_IGNORE_NEXT_RULESignore_next_rulesRegola di default con ignore_next_rules = true.

Condizioni

codeTipico fieldCausa
RULE_OPTION_ID_REQUIREDconditions[i].rule_option.idMancato o ≤ 0.
OPERAND_REQUIREDconditions[i].operandOperando vuoto per un operatore che ne richiede uno.
OPERATOR_REQUIREDconditions[i].operatorL'operatore è vuoto.
INVALID_OPERATORconditions[i].operatorOperatore non valido per tale opzione di regola.
DUPLICATE_RULE_OPTIONconditions[i].rule_optionStessa opzione di regola utilizzata più di una volta (escluso metadata).
METADATA_FIELDS_REQUIREDconditions[i].metadata_field_namemetadata condizione mancante metadata_field_name/metadata_field_type.
INVALID_METADATA_FIELD_TYPEconditions[i].metadata_field_typeNon lo so. text o numeric.
RULE_OPTION_NOT_FOUNDconditions[i].rule_option.idL'opzione di regola non esiste.
INVALID_LIST_REFERENCEconditions[i].operandoperand_type = list ma la lista UUID è non valida o non trovata.

Membri

codeTipico fieldCausa
MEMBER_PROVIDER_REQUIREDmembers[i]I membri non fanno riferimento a provider (pagamento, frode o autenticazione).
MEMBER_MULTIPLE_PROVIDER_TYPESmembers[i]I membri mescolano i tipi di fornitori (ad esempio il pagamento + frode, o il pagamento + autenticazione).
PAYMENT_PROVIDER_ID_REQUIREDmembers[i].payment_provider_idmerchant_payment_provider_id inviato senza payment_provider_id.
AUTHENTICATION_TYPE_REQUIREDmembers[i].authentication_typeMembro di autenticazione senza un authentication_type.
INVALID_AUTHENTICATION_TYPEmembers[i].authentication_typeNon uno di 3ds_authentication, 3ds_data_only, unico_id (Applicazioni) failover.authentication_type anche).
FAILOVER_ONLY_ON_AUTHENTICATIONmembers[i].failoverfailover su un membro non-autentico.
DUPLICATE_MEMBERmembers[i]Lo stesso fornitore appare più di una volta nella regola.
DUPLICATE_MEMBER_SORTmembers[i].sortDue membri condividono una sort value.
INVALID_STRATEGYmembers[i].strategyNon lo so. cascade.
POST_AUTH_ONLY_FRAUDmembers[i].post_authorizationpost_authorization = true su un membro non-fraud.
POST_AUTH_MUST_BE_LASTmembers[i].post_authorizationIl post_authorization membro non è ultimo da sort.
PROVIDER_NOT_AVAILABLEmembers[i]Il Fornitore (pagamento, frode o autenticazione) non è abilitato per questo commerciante.
MERCHANT_PROVIDER_MISMATCHmembers[i].merchant_payment_provider_idLa connessione non appartiene alla data payment_provider_id.

Test A/B

codeTipico fieldCausa
SPLIT_WEIGHTS_MUST_SUM_TO_100childrenBambino bambino weight i valori non sommano a 100.

Flusso end-to-end#

Il /triggers Supporti endpoint due modalità di integrazione — scegliere quale sia la quantità della logica di decisione che si desidera possedere. Entrambi usano lo stesso punto finale e le stesse regole; solo la forma di risposta e il numero di chiamate differiscono. Selezionalo con mode su richiesta (single è il default). In entrambi i casi, chiudi il loop con uno /feedback call.

ModalitàCome funzionaQuando è meglio
1 · Singola chiamata (Client-driven)Uno /triggers chiamata restituisce il piano completo — l'autenticazione da eseguire (con failover) e actions che mappano ogni risultato a processo o declino. Eserciti il piano da solo.Vuoi le ultime gite e sei comodo ad applicare la decisione a livello locale.
2 · Guidato (motore-driven)Chiamate /triggers e il motore ritorna solo il passo successivo più un status. Lo esegua, poi chiama /triggers di nuovo con il risultato di quel passo; il motore restituisce il passo successivo. Ripeti fino a quando non status = completed.Vuoi che DEUNA possieda e centralizzi la logica decisionale, passo dopo passo.

Modalità 1 — singola chiamata

Tu fai singolo /triggers Chiama. Se si esegue un fornitore di frode prima di DEUNA, includere il suo risultato in quella chiamata. La risposta è autocontenuta: si nomina l'autenticazione da eseguire (con un fallire se il primario non è disponibile) e il azioni che mappa il risultato di autenticazione a cosa fare successivo — processo con un fornitore di pagamento o declino. La tua piattaforma esegue che pianifica localmente e chiude il loop con uno /feedback — c'è un no second /triggers round-trip.

Passo dopo passo

  1. (Opzionale) Punteggio con un fornitore di frode. Se la configurazione utilizza un provider di frode in alto, cattura il suo punteggio / decisione in modo che possa essere abbinato alle regole (tramite le regole) fraud_risk opzione o metadata).
  2. Richiedere la raccomandazione (una chiamata). POST /routing/v1/triggers con i dati delle transazioni (e il risultato delle frodi, se ne ha). La risposta contiene un authentication blocco (primary + facoltativo failover) e actions block.
  3. Authenticate. Eseguire l'autenticazione raccomandata (ad esempio autenticazione 3DS, solo dati 3DS, o ID Unico). Se il primary il fornitore non è disponibile, utilizzare failover.
  4. Decide e processa. Applicare actions: ogni esito mappa a process (con il fornitore di pagamento denominato nell'azione) o decline; default l'azione si applica quando nessun altro risultato corrisponde.
  5. Segnala il risultato. POST /routing/v1/feedback con il collection oggetto e attempts (risultato di autenticità + risultato di pagamento). Questo chiude il loop per l'analisi e l'etichettatura ML.

I commercianti con un unico fornitore di pagamento vedranno un fornitore nel process azione; i commercianti con diversi possono configurare una cascata nella regola members, e la raccomandazione riflette il provider(i) di tentare.

Diagramma di sequenza
1Your platform2Fraud provider3DEUNA RecommendationEnginescore request (if used)score + decisionOne POST /routing/v1/triggers (txndata + fraud result)recommendation (auth route + failover+ actions)Run recommended auth use failover ifprimary downApply actions - process with paymentprovider, or declineTwo POST /routing/v1/feedback (authresult + payment result)200 OK (outcome recorded, predictionML labeled)
Commerciante o clienteProvider o processoreDEUNA

Risposta della modalità 1 — il piano completo

Il /triggers risposta è una raccomandazione unica e autonoma: authentication da eseguire (con opzione failover) e actions che mappa il risultato di autenticazione a cosa fare. La tua piattaforma esegue questo localmente.

JSON
{
  "collection": {
    "id": "c7b9e3a2-4d51-4f8a-9b21-6e0f2a1c8d34",
    "prediction_id": "pred_xyz789abc"
  },
  "recommendation": {
    "rule_id": 21866,
    "rule_label": "High risk → 3DS authentication",
    "authentication": {
      "primary":  { "authentication_type": "3ds_authentication" },
      "failover": { "authentication_type": "3ds_data_only" }
    },
    "actions": {
      "on_success_with_liability_shift": { "action": "process", "provider": "acquirer_gateway" },
      "default": { "action": "decline" }
    }
  }
}
CampoTipoDescrizione
collection.idUUIDID di correlazione per questa valutazione. Echo in /feedback.
collection.prediction_idstringML maniglia per la raccomandazione. Echo in /feedback.
recommendation.rule_idintegerLa regola che corrispondeva (stesso identificativo come l'oggetto di regola) id).
recommendation.rule_labelstringNome di regola leggibile dall'uomo.
recommendation.authentication.primaryobjectL'autenticazione da eseguire prima: { "authentication_type": "3ds_authentication" }. Utilizza lo stesso authentication_type valori come membri della regola.
recommendation.authentication.failoveroggetto | nullAutenticazione di backup se il primario non è disponibile.
recommendation.actionsobjectConsente di visualizzare il risultato dell'autenticazione in un'azione. Chiuso per risultato.
recommendation.actions.<outcome>.actionenumeraprocess o decline.
recommendation.actions.<outcome>.providerstringPresente quando action = process — il nome del fornitore di pagamento da utilizzare, come configurato nella regola (ad es. acquirer_gateway).
recommendation.actions.defaultobjectL'azione di fallback applicata quando nessun altro risultato corrisponde.

Tasti di uscita sotto actions descrivere il risultato di autenticazione a cui si applicano (ad es. on_success_with_liability_shift); default è il catch-all.

Modalità 2 — guidati (passo)

Imposta "mode": "guided" su richiesta. Invece del piano completo, il motore restituisce il passo successivo e un status, e si guida il flusso un passo alla volta:

  • status: awaiting_authentication → next_step ti dice quale autenticazione eseguire.
  • status: awaiting_fraud → next_step ti dice quale controllo frode per eseguire.
  • status: completed → il motore ha deciso; next_step.action è process (con un provider) o decline.

Dopo aver eseguito un passo, chiama /triggers — di nuovo — eco il collection dalla risposta precedente e includere il risultato di quel passaggio (authentication_result o fraud_result). Il motore avanza e ritorna il passo successivo. Ripeti fino a quando non status = completed, poi vicino con /feedback.

Diagramma di sequenza
1Your platform(merchant / PSP)2DEUNA RecommendationEnginePOST /routing/v1/triggers(mode=guided, txn data)status=awaiting_authentication ·next_step: run 3ds_authenticationRun 3DS authenticationPOST /routing/v1/triggers (collection+ authentication_result)status=completed · next_step: processwith acquirer_gatewayProcess the paymentPOST /routing/v1/feedback (attempts)200 OK
Commerciante o clienteDEUNA

Prima risposta — un passo per eseguire

JSON
{
  "collection": { "id": "c7b9e3a2-4d51-4f8a-9b21-6e0f2a1c8d34", "prediction_id": "pred_xyz789abc" },
  "recommendation": {
    "rule_id": 21866,
    "status": "awaiting_authentication",
    "next_step": {
      "type": "authentication",
      "authentication_type": "3ds_authentication",
      "failover": { "authentication_type": "3ds_data_only" }
    }
  }
}

Richiesta di follow-up — posta il risultato del passaggio

JSON
{
  "mode": "guided",
  "collection": { "id": "c7b9e3a2-4d51-4f8a-9b21-6e0f2a1c8d34", "prediction_id": "pred_xyz789abc" },
  "authentication_result": { "eci": "05", "pares_status": "Y", "liability_shift": true }
}

Risposta del terminale — status = completed

JSON
{
  "collection": { "id": "c7b9e3a2-4d51-4f8a-9b21-6e0f2a1c8d34", "prediction_id": "pred_xyz789abc" },
  "recommendation": {
    "rule_id": 21866,
    "status": "completed",
    "next_step": { "type": "process", "provider": "acquirer_gateway" }
  }
}
CampoTipoDescrizione
modeenumeraCampo di richiesta: single (predefinito) o guided.
collectionobjectCampo richiesta su chiamate guidate di follow-up: eco il collection dalla risposta precedente per continuare la stessa valutazione.
authentication_result / fraud_resultobjectCampo richiesta: il risultato del passaggio appena eseguito.
recommendation.statusenumeraawaiting_authentication, awaiting_fraudo completed.
recommendation.next_step.typeenumeraauthentication, fraud, processo decline.
recommendation.next_step.authentication_typeenumeraPresente quando type = authentication.
recommendation.next_step.failoveroggetto | nullBackup opzionale per una fase di autenticazione.
recommendation.next_step.providerstringPresente quando type = process — il fornitore di pagamento da utilizzare.

Entrambe le modalità sono sostenute dalle stesse regole e producono le stesse decisioni — la modalità guidata chiede semplicemente a DEUNA per un passo alla volta invece di restituire l'intero piano davanti.

Identificazione della carta su /triggers

La carta in payment_source.card_info può essere fornito uno dei tre modi:

MetodoCampiNote
PAN completacard_numberBIN e marca sono derivate lato server.
BIN + ultimi quattrobin (8 cifre), last_fourUsa quando non si trasmette il PAN completo. Il BIN a 8 cifre dà un routing di livello emittente.
Token di retenetwork_token: { dpan, par, account_bin, cryptogram, eci }Per le credenziali tokenizzate. Vedere la nota qui sotto per ottenere i dati di livello BIN.

Feedback attempts esempio

attempts segnala cosa è successo: il risultato dell'autenticazione, quindi il risultato del pagamento dal tuo fornitore di pagamento (codici ISO 8583).

JSON
{
  "collection": { "id": "c7b9e3a2-4d51-4f8a-9b21-6e0f2a1c8d34", "prediction_id": "pred_xyz789abc" },
  "transaction_id": "1b3d5f7a-8c9e-40a2-b1c3-d4e5f6a7b8c9",
  "attempts": [
    {
      "step": "authentication",
      "authentication_type": "3ds_authentication",
      "result": { "eci": "05", "pares_status": "Y", "liability_shift": true }
    },
    {
      "step": "payment",
      "provider": "acquirer_gateway",
      "result": { "status": "declined", "error_code": "05", "error_reason": "do_not_honor" }
    }
  ]
}

error_code utilizza i codici di risposta ISO 8583 — ad esempio. "05" = non onorare. eci e pares_status portare il risultato 3DS; liability_shift indica se l'autenticazione ha spostato la responsabilità.

Autenticazione di backup (failover)

Le regole possono definire fallire provider di autenticazione. Se il raccomandato primary provider non è disponibile (ad esempio il fornitore di autenticazione 3DS è in calo), la raccomandazione restituisce failover (ad esempio 3DS Data Only) quindi un'interruzione del fornitore non lascia mai una transazione non autenticata.


Domande o dettagli mancanti? Contatta il tuo team di integrazione DEUNA.