Payments
List payments received from customers
Payments received from customers against their account (the Receive Payment module). Not to be confused with the payment of an invoice at the counter, which is part of the invoice (see the payments of an invoice).
Statuses: regular, void. A void payment keeps its identity but its amounts are zero.
Endpoints#
List: GET/api/v1/payments One record: GET/api/v1/payments/{id}
Example request#
List with a page size and a sort:
curl "https://votre-entreprise.evyooht.com/api/v1/payments?per_page=5&sort=-date" \
-H "Authorization: Bearer evy_at_votre_jeton"$headers = @{ Authorization = "Bearer evy_at_votre_jeton" }
Invoke-RestMethod -Uri "https://votre-entreprise.evyooht.com/api/v1/payments?per_page=5&sort=-date" -Headers $headersconst response = await fetch("https://votre-entreprise.evyooht.com/api/v1/payments?per_page=5&sort=-date", {
headers: { Authorization: "Bearer evy_at_votre_jeton" },
});
const data = await response.json();
console.log(data);$ch = curl_init("https://votre-entreprise.evyooht.com/api/v1/payments?per_page=5&sort=-date");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer evy_at_votre_jeton"],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);import requests
response = requests.get(
"https://votre-entreprise.evyooht.com/api/v1/payments",
params={"per_page": 5, "sort": "-date"},
headers={"Authorization": "Bearer evy_at_votre_jeton"},
)
print(response.json())One record by its identifier:
curl "https://votre-entreprise.evyooht.com/api/v1/payments/2201" \
-H "Authorization: Bearer evy_at_votre_jeton"$headers = @{ Authorization = "Bearer evy_at_votre_jeton" }
Invoke-RestMethod -Uri "https://votre-entreprise.evyooht.com/api/v1/payments/2201" -Headers $headersconst response = await fetch("https://votre-entreprise.evyooht.com/api/v1/payments/2201", {
headers: { Authorization: "Bearer evy_at_votre_jeton" },
});
const data = await response.json();
console.log(data);$ch = curl_init("https://votre-entreprise.evyooht.com/api/v1/payments/2201");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer evy_at_votre_jeton"],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);import requests
response = requests.get(
"https://votre-entreprise.evyooht.com/api/v1/payments/2201",
headers={"Authorization": "Bearer evy_at_votre_jeton"},
)
print(response.json())Query parameters of the list#
All filters can be combined: they add up (AND). An unknown parameter or an invalid value is refused with a 400 error, never ignored.
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number, starting at 1. A page beyond the data is empty, not an error. At most 10000 pages: filter instead of paging deeper. Default: 1. |
per_page | integer | Results per page, from 1 to 100. Default: 25. |
sort | string | Sort fields, separated by commas, with - in front for descending order. Up to 3 fields. Sortable fields: id, date, amount_received, updated_at. Default: -date. Default: -date. |
status | string | regular or void. Allowed values: regular, void. |
customer_id | integer | Only records of this customer. |
store_id | integer | Only documents of this store. |
currency | string | Only documents in this currency (USD or HTG). |
date_from | string (date) | Only documents dated on or after this day (YYYY-MM-DD). |
date_to | string (date) | Only documents dated on or before this day (YYYY-MM-DD), the whole day included. |
search | string | Text contained in the payment number or the customer name. |
updated_since | string | Only records modified since this date (YYYY-MM-DD) or date and time (YYYY-MM-DDTHH:MM:SS). |
Response fields#
The list and the detail route return these fields. A field is null when the value is not recorded. A field marked needs permission is absent (not empty) unless your client holds that permission.
| Field | Type | Description |
|---|---|---|
id | integer | Unique identifier. Use it in the detail route. |
number | string| null | Human-readable document number, for example I1-4149. |
store_id | integer| null | Identifier of the store that owns the document (see the stores resource). |
date | string(date-time, local) | null | Document date and time (store local time, no time zone). |
customer_id | integer| null | Identifier of the customer (see the customers resource). |
customer_name | string| null | Full name of the customer. |
status | "regular"| "void" | null | regular or void. |
payment_type | string| null | Payment method as recorded (for example Cash, Cheque, Db/Cr). |
currency | string| null | Currency of the document: USD or HTG. |
exchange_rate | number| null | Exchange rate between USD and HTG recorded on the document. |
amount_received | number| null | Total amount received. Zero when the payment is void. |
cash | number| null | Part paid in cash. |
card | number| null | Part paid by debit or credit card. |
cheque | number| null | Part paid by cheque. |
cheque_number | string| null | Cheque number. |
notes | string| null | Free-text notes printed on the document. |
created_at | string(date-time, local) | null | When the record was created (local time, no time zone). |
updated_at | string(date-time, local) | null | When the record was last modified (local time, no time zone). Use it with the updated_since filter to synchronize. |
Relation: applied_to#
Returned by the detail route only. The invoices this payment was applied to.
| Field | Type | Description |
|---|---|---|
invoice_id | integer| null | Identifier of the invoice (see the invoices resource). |
invoice_number | string| null | Number of the invoice. |
amount | number| null | Amount applied to this invoice. |
date | string(date-time, local) | null | Date and time of the application. |
Example response: list#
{
"data": [
{
"id": 2201,
"number": "P1-2201",
"store_id": 1,
"date": "2026-03-15T14:30:00",
"customer_id": 58,
"customer_name": "Marie Dupont",
"status": "regular",
"payment_type": "Cash",
"currency": "USD",
"exchange_rate": 130.5,
"amount_received": 1250,
"cash": 1250,
"card": 0,
"cheque": 0,
"cheque_number": "",
"notes": "Delivered on Friday.",
"created_at": "2026-03-15T14:30:00",
"updated_at": "2026-03-15T14:30:00"
}
],
"meta": {
"page": 1,
"per_page": 25,
"total": 1,
"total_pages": 1
}
}Example response: one record#
{
"data": {
"id": 2201,
"number": "P1-2201",
"store_id": 1,
"date": "2026-03-15T14:30:00",
"customer_id": 58,
"customer_name": "Marie Dupont",
"status": "regular",
"payment_type": "Cash",
"currency": "USD",
"exchange_rate": 130.5,
"amount_received": 1250,
"cash": 1250,
"card": 0,
"cheque": 0,
"cheque_number": "",
"notes": "Delivered on Friday.",
"created_at": "2026-03-15T14:30:00",
"updated_at": "2026-03-15T14:30:00",
"applied_to": [
{
"invoice_id": 4149,
"invoice_number": "I1-4149",
"amount": 1250,
"date": "2026-03-15T14:30:00"
}
]
}
}Errors#
The error format and the full list of codes are described in Errors.
| Status | When |
|---|---|
400 | A query parameter is invalid or unknown. Every fault is reported at once in error.details. Nothing is ignored silently. |
401 | The token is missing, malformed, expired or revoked (missing_token or invalid_token). Ask for a new token. |
403 | Your token does not carry the permission this route needs (insufficient_scope), or the request was not made over HTTPS (https_required). |
429 | Too many requests this minute. Wait for the number of seconds in the Retry-After header. |