Aller au contenu

Enregistrer un encaissement off_ledger + lettrage FIFO automatique

POST
/v1/accounts-receivable/accounts/{id}/payments
curl --request POST \
--url https://example.com/v1/accounts-receivable/accounts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/payments \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example' \
--header 'X-API-Key: <X-API-Key>' \
--data '{ "method": "transfer", "amount": { "amountCents": "50000", "currency": "EUR" }, "receivedAt": "2026-04-15", "externalRef": "example" }'

Virement/chèque société reçu HORS caisse (off_ledger — jamais de règlement Folio, INV-AR8). Le montant est lettré automatiquement sur les créances ouvertes de la plus ancienne à la plus récente, réduisant le solde. Le surplus reste non affecté sur l’encaissement. IDEMPOTENT : fournissez un en-tête Idempotency-Key (garde HTTP contre rejeu réseau / double-clic, même mécanisme que les POST folio/fiscal/cashless) → un rejeu de la MÊME clé rejoue la réponse cachée sans créer de 2ᵉ encaissement ni double lettrage. externalRef (réf bancaire) reste une 2ᵉ couche d’idempotence métier (dédup sur le n° de virement réel) + rapprochement, mais n’est PAS requise : la garde HTTP est le rempart principal.

id
required
string format: uuid

Identifiant du compte débiteur

Idempotency-Key
required
string
>= 8 characters <= 200 characters

Clé d’idempotence OBLIGATOIRE (8–200 car.) — anti-double-encaissement / double-lettrage FIFO. 400 si absente ou longueur invalide ; un rejeu de la même clé rejoue la réponse cachée.

Media type application/json
object
method
required
string
Allowed values: transfer cheque direct_debit card cash other
Example
transfer
amount
required
object
amountCents
required

Montant en centimes (bigint string)

string
Example
50000
currency
required
string
Allowed values: EUR GBP
receivedAt

Date de réception (YYYY-MM-DD, défaut serveur : aujourd’hui)

string format: date
externalRef

Référence bancaire opaque (n° virement/chèque) — idempotence

string
nullable

Encaissement enregistré + lettré

Media type application/json
object
data
required
object
receiptId
required
string format: uuid
allocatedCents
required

Montant en centimes (bigint string)

string
unallocatedCents
required

Montant en centimes (bigint string)

string
Example
{
"data": {
"allocatedCents": "12500",
"unallocatedCents": "12500"
}
}

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
}

Compte débiteur introuvable

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
}