curl --request PUT \
--url https://api.sandbox.paypathiq.com/v1/clients/{clientCode}/payment-reconciliations/{externalReconciliationId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalPaymentRequestId": "PAYREQ_EXAMPLE",
"receiptLines": [
{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"externalReceiptLineId": "RCPT_LINE_1",
"externalReceivableId": "REC_EXAMPLE_1"
}
]
}
'{
"acceptedAt": "2026-10-15T12:30:00.000Z",
"allocations": [
{
"allocatedAmount": {
"amount": "100.00",
"currency": "EUR"
},
"externalReceivableId": "REC_EXAMPLE_1",
"matchedAmount": {
"amount": "100.00",
"currency": "EUR"
},
"unmatchedAmount": {
"amount": "0.00",
"currency": "EUR"
}
},
{
"allocatedAmount": {
"amount": "200.00",
"currency": "EUR"
},
"externalReceivableId": "REC_EXAMPLE_2",
"matchedAmount": {
"amount": "0.00",
"currency": "EUR"
},
"unmatchedAmount": {
"amount": "200.00",
"currency": "EUR"
}
}
],
"externalPaymentRequestId": "PAYREQ_EXAMPLE",
"externalReconciliationId": "RECON_EXAMPLE",
"lines": [
{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"externalReceiptLineId": "RCPT_LINE_1",
"externalReceivableId": "REC_EXAMPLE_1",
"state": "matched"
}
],
"paymentAmount": {
"amount": "300.00",
"currency": "EUR"
},
"revision": 1,
"status": "matched",
"unappliedAmount": {
"amount": "0.00",
"currency": "EUR"
},
"unmatchedAmount": {
"amount": "200.00",
"currency": "EUR"
}
}Reconcile a Payment against accounting receipt lines
Requires payment_observations:write. Acknowledges the confirmed Payment of a hosted Payment request against one or more Source receipt lines. A line matches only when its stable receipt identity, Client, currency and Receivable reference fit an allocation of that Payment and the line fits inside the allocated amount not yet acknowledged; similar amounts or dates never match. Several reconciliations may acknowledge one Payment progressively, and the unmatched remainder stays explicit. No reconciliation changes funds, balances or the Payment: replaying a receipt acknowledges existing funds without another deduction. A line that does not fit is stored as held, preserving both figures, and the affected Receivables have recovery and Payment actions held until matching evidence or an authorized correction resolves it; other Receivables continue. Reconciliation is accepted while the Source feed is stale. Reusing a receipt line identity with different evidence returns 409 and records nothing. An identical retry returns 200 and changes nothing.
curl --request PUT \
--url https://api.sandbox.paypathiq.com/v1/clients/{clientCode}/payment-reconciliations/{externalReconciliationId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalPaymentRequestId": "PAYREQ_EXAMPLE",
"receiptLines": [
{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"externalReceiptLineId": "RCPT_LINE_1",
"externalReceivableId": "REC_EXAMPLE_1"
}
]
}
'{
"acceptedAt": "2026-10-15T12:30:00.000Z",
"allocations": [
{
"allocatedAmount": {
"amount": "100.00",
"currency": "EUR"
},
"externalReceivableId": "REC_EXAMPLE_1",
"matchedAmount": {
"amount": "100.00",
"currency": "EUR"
},
"unmatchedAmount": {
"amount": "0.00",
"currency": "EUR"
}
},
{
"allocatedAmount": {
"amount": "200.00",
"currency": "EUR"
},
"externalReceivableId": "REC_EXAMPLE_2",
"matchedAmount": {
"amount": "0.00",
"currency": "EUR"
},
"unmatchedAmount": {
"amount": "200.00",
"currency": "EUR"
}
}
],
"externalPaymentRequestId": "PAYREQ_EXAMPLE",
"externalReconciliationId": "RECON_EXAMPLE",
"lines": [
{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"externalReceiptLineId": "RCPT_LINE_1",
"externalReceivableId": "REC_EXAMPLE_1",
"state": "matched"
}
],
"paymentAmount": {
"amount": "300.00",
"currency": "EUR"
},
"revision": 1,
"status": "matched",
"unappliedAmount": {
"amount": "0.00",
"currency": "EUR"
},
"unmatchedAmount": {
"amount": "200.00",
"currency": "EUR"
}
}Authorizations
Integration-owned environment-specific API key. Never paste a production key into documentation tools.
Path Parameters
Stable non-sensitive Client code authorized by the Integration grant.
^[A-Za-z0-9_-]{1,128}$Caller-assigned identifier of this reconciliation. Reusing it with an identical body is a safe retry.
^[A-Za-z0-9_-]{1,128}$Body
One uncompressed resource representation, limited to 256 KiB.
The hosted Payment request whose confirmed Payment these receipt lines acknowledge. Matching uses this stable reference, the Client, the currency and the exact allocated amounts, never a similar amount or date.
^[A-Za-z0-9_-]{1,128}$One or more Source receipt lines. A Payment may be acknowledged progressively across several reconciliations.
1 - 50 elementsShow child attributes
Show child attributes
Response
Identical safe retry.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$The Payment's allocations as of this read, across every reconciliation of the Payment. unmatchedAmount is the allocated amount no Source receipt line has acknowledged yet.
Show child attributes
Show child attributes
^[A-Za-z0-9_-]{1,128}$^[A-Za-z0-9_-]{1,128}$Show child attributes
Show child attributes
Show child attributes
Show child attributes
Increases each time the reconciliation's state changes. It matches the revision in change-feed events.
1 <= x <= 9007199254740991matched: every line fits the allocated amounts. held: at least one line differs and affected recovery and Payment actions are held. resolved: every difference was cleared by matching evidence or an authorized correction.
matched, held, resolved Funds of the Payment that no allocation covers. They are never acknowledged by receipt lines.
Show child attributes
Show child attributes
The total allocated amount of the Payment that no Source receipt line has acknowledged yet.
Show child attributes
Show child attributes
Show child attributes
Show child attributes