Aller au contenu

Soumettre une facture fournisseur électronique (CII/UBL) au registre (ADR-00D101 §7)

POST
/v1/inbound-invoices
curl --request POST \
--url https://example.com/v1/inbound-invoices \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <X-API-Key>' \
--data '{ "operatingMandateId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "xml": "example" }'

Parse (fail-closed) puis valide EN 16931 le document. TOUJOURS enregistré : received si conforme (champs extraits, montants en centimes bigint-string), rejected avec raisons structurées sinon (le rejet est un résultat métier, pas une erreur). Re-upload octet-identique → réponse idempotente (deduplicated: true). Même n° de facture/fournisseur avec un contenu DIFFÉRENT → 409 INBOUND_INVOICE_DUPLICATE_CONFLICT.

Media type application/json
object
operatingMandateId
required
string format: uuid
xml
required

Document XML source (CII D16B/D22B ou UBL 2.1), max 2 000 000 caractères

string
Example generated
{
"operatingMandateId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"xml": "example"
}

Entrée du registre (received ou rejected) + indicateur de dédup

Media type application/json
object
data
required
object
invoice
required
object
id
required
string format: uuid
operatingMandateId
required
string format: uuid
status
required
string
Allowed values: received rejected
syntax
required
string
nullable
Allowed values: cii ubl
sourceHash
required

SHA-256 hex du document source (dédup octet-identique)

string
supplierName
required

BT-27 — null si rejet

string
nullable
supplierSiren
required

BT-30 quand SIREN français (9 chiffres)

string
nullable
supplierVatNumber
required

BT-31

string
nullable
buyerName
required

BT-44

string
nullable
invoiceNumber
required

BT-1

string
nullable
typeCode
required

BT-3 (UNTDID 1001)

string
nullable
Allowed values: 380 381 386
issueDate
required

BT-2

string format: date
nullable
currency
required

BT-5 (ISO 4217)

string
nullable
totalLineNet
required
object
amountCents
required

Montant en centimes (bigint sérialisé en string)

string
currency
required
string
Allowed values: EUR GBP
totalTaxExclusive
required
object
amountCents
required

Montant en centimes (bigint sérialisé en string)

string
currency
required
string
Allowed values: EUR GBP
totalTax
required
object
amountCents
required

Montant en centimes (bigint sérialisé en string)

string
currency
required
string
Allowed values: EUR GBP
totalGrand
required
object
amountCents
required

Montant en centimes (bigint sérialisé en string)

string
currency
required
string
Allowed values: EUR GBP
totalDue
required
object
amountCents
required

Montant en centimes (bigint sérialisé en string)

string
currency
required
string
Allowed values: EUR GBP
vatBreakdown
required

Ventilation TVA BG-23 (vide si rejet)

Array<object>
object
categoryCode
required

BT-118 (UNTDID 5305)

string
ratePercent
required

BT-119 (%)

string
nullable
taxable
required
object
amountCents
required

Montant en centimes (bigint sérialisé en string)

string
currency
required
string
Allowed values: EUR GBP
tax
required
object
amountCents
required

Montant en centimes (bigint sérialisé en string)

string
currency
required
string
Allowed values: EUR GBP
rejectionReasons
required

Raisons structurées de non-conformité (vide si received)

Array<object>
object
rule
required
string
detail
required
string
receivedAt
required
string format: date-time
nullable
deduplicated
required

True = document octet-identique déjà au registre (réponse idempotente)

boolean
Example
{
"data": {
"invoice": {
"status": "received",
"syntax": "cii",
"typeCode": "380",
"totalLineNet": {
"amountCents": "12000",
"currency": "EUR"
},
"totalTaxExclusive": {
"amountCents": "12000",
"currency": "EUR"
},
"totalTax": {
"amountCents": "12000",
"currency": "EUR"
},
"totalGrand": {
"amountCents": "12000",
"currency": "EUR"
},
"totalDue": {
"amountCents": "12000",
"currency": "EUR"
},
"vatBreakdown": [
{
"ratePercent": "20.00",
"taxable": {
"amountCents": "12000",
"currency": "EUR"
},
"tax": {
"amountCents": "12000",
"currency": "EUR"
}
}
],
"rejectionReasons": [
{
"rule": "BR-CO-15"
}
]
}
}
}

Corps ou paramètres invalides

Media type application/json
object
code
required

Code machine de l’erreur

string
message
required

Message lisible

string
origin

Origine domaine de l’erreur (optionnel)

object
boundedContext
string
module
string
status
required
integer
traceId
required

Identifiant de corrélation pour le support

string
Example
{
"code": "RESERVATION_NOT_FOUND",
"message": "Réservation introuvable",
"status": 404
}

Non authentifié

Media type application/json
object
code
required

Code machine de l’erreur

string
message
required

Message lisible

string
origin

Origine domaine de l’erreur (optionnel)

object
boundedContext
string
module
string
status
required
integer
traceId
required

Identifiant de corrélation pour le support

string
Example
{
"code": "RESERVATION_NOT_FOUND",
"message": "Réservation introuvable",
"status": 404
}

Permission refusée ou périmètre non vérifiable

Media type application/json
object
code
required

Code machine de l’erreur

string
message
required

Message lisible

string
origin

Origine domaine de l’erreur (optionnel)

object
boundedContext
string
module
string
status
required
integer
traceId
required

Identifiant de corrélation pour le support

string
Example
{
"code": "RESERVATION_NOT_FOUND",
"message": "Réservation introuvable",
"status": 404
}

Conflit d’état ou stock épuisé

Media type application/json
object
code
required

Code machine de l’erreur

string
message
required

Message lisible

string
origin

Origine domaine de l’erreur (optionnel)

object
boundedContext
string
module
string
status
required
integer
traceId
required

Identifiant de corrélation pour le support

string
Example
{
"code": "RESERVATION_NOT_FOUND",
"message": "Réservation introuvable",
"status": 404
}