Record a Payment observation
curl --request PUT \
--url https://api.sandbox.casepathiq.com/v1/clients/{clientCode}/matters/by-client-reference/{clientReferenceId}/payment-observations/{externalPaymentId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "payment",
"amount": "200.00",
"currency": "EUR",
"effectiveOn": "2026-08-27",
"channel": "direct_to_creditor",
"resultingOutstandingAmount": "1050.00"
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'payment',
amount: '200.00',
currency: 'EUR',
effectiveOn: '2026-08-27',
channel: 'direct_to_creditor',
resultingOutstandingAmount: '1050.00'
})
};
fetch('https://api.sandbox.casepathiq.com/v1/clients/{clientCode}/matters/by-client-reference/{clientReferenceId}/payment-observations/{externalPaymentId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.casepathiq.com/v1/clients/{clientCode}/matters/by-client-reference/{clientReferenceId}/payment-observations/{externalPaymentId}"
payload = {
"type": "payment",
"amount": "200.00",
"currency": "EUR",
"effectiveOn": "2026-08-27",
"channel": "direct_to_creditor",
"resultingOutstandingAmount": "1050.00"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"clientCode": "SDCC",
"clientReferenceId": "SDCC-2026-00482",
"externalPaymentId": "payobs_01JEXAMPLE",
"matterId": "<string>",
"type": "payment",
"amount": "200.00",
"currency": "<string>",
"effectiveOn": "2023-12-25",
"resultingOutstandingAmount": "1250.00",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"channel": "direct_to_creditor",
"reference": "<string>",
"reversesExternalPaymentId": "payobs_01JEXAMPLE"
}{
"clientCode": "SDCC",
"clientReferenceId": "SDCC-2026-00482",
"externalPaymentId": "payobs_01JEXAMPLE",
"matterId": "<string>",
"type": "payment",
"amount": "200.00",
"currency": "<string>",
"effectiveOn": "2023-12-25",
"resultingOutstandingAmount": "1250.00",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"channel": "direct_to_creditor",
"reference": "<string>",
"reversesExternalPaymentId": "payobs_01JEXAMPLE"
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}Payments
Record a Payment observation
Appends immutable payment, refund, or reversal evidence and updates the balance atomically under the Matter lock. A reversal must target one unreversed, non-reversal observation owned by the authenticated Source integration on the same Client and Matter, with an exact amount and currency match.
PUT
/
v1
/
clients
/
{clientCode}
/
matters
/
by-client-reference
/
{clientReferenceId}
/
payment-observations
/
{externalPaymentId}
Record a Payment observation
curl --request PUT \
--url https://api.sandbox.casepathiq.com/v1/clients/{clientCode}/matters/by-client-reference/{clientReferenceId}/payment-observations/{externalPaymentId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "payment",
"amount": "200.00",
"currency": "EUR",
"effectiveOn": "2026-08-27",
"channel": "direct_to_creditor",
"resultingOutstandingAmount": "1050.00"
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'payment',
amount: '200.00',
currency: 'EUR',
effectiveOn: '2026-08-27',
channel: 'direct_to_creditor',
resultingOutstandingAmount: '1050.00'
})
};
fetch('https://api.sandbox.casepathiq.com/v1/clients/{clientCode}/matters/by-client-reference/{clientReferenceId}/payment-observations/{externalPaymentId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.casepathiq.com/v1/clients/{clientCode}/matters/by-client-reference/{clientReferenceId}/payment-observations/{externalPaymentId}"
payload = {
"type": "payment",
"amount": "200.00",
"currency": "EUR",
"effectiveOn": "2026-08-27",
"channel": "direct_to_creditor",
"resultingOutstandingAmount": "1050.00"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"clientCode": "SDCC",
"clientReferenceId": "SDCC-2026-00482",
"externalPaymentId": "payobs_01JEXAMPLE",
"matterId": "<string>",
"type": "payment",
"amount": "200.00",
"currency": "<string>",
"effectiveOn": "2023-12-25",
"resultingOutstandingAmount": "1250.00",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"channel": "direct_to_creditor",
"reference": "<string>",
"reversesExternalPaymentId": "payobs_01JEXAMPLE"
}{
"clientCode": "SDCC",
"clientReferenceId": "SDCC-2026-00482",
"externalPaymentId": "payobs_01JEXAMPLE",
"matterId": "<string>",
"type": "payment",
"amount": "200.00",
"currency": "<string>",
"effectiveOn": "2023-12-25",
"resultingOutstandingAmount": "1250.00",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"channel": "direct_to_creditor",
"reference": "<string>",
"reversesExternalPaymentId": "payobs_01JEXAMPLE"
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}{
"type": "https://api.casepathiq.com/problems/usable_address_required",
"title": "Usable address required",
"status": 400,
"detail": "Each Party needs exactly one usable correspondence address that meets the letter minimum.",
"code": "usable_address_required",
"requestId": "6f2c1b8e-3a41-4f43-9a55-6b2f0b1b7c10",
"errors": [
{
"pointer": "/parties/1/addresses",
"code": "usable_address_required"
}
]
}Authorizations
Path Parameters
Body
application/json
- Payment or refund
- Reversal
Response
Current immutable Payment observation
Payment/refund include channel; reversal includes reversesExternalPaymentId and omits channel.