curl --request GET \
--url https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances \
--header 'Authorization: Bearer <token>' \
--header 'X-CompanyID: <x-companyid>' \
--header 'X-UserID: <x-userid>'using RestSharp;
var options = new RestClientOptions("https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("X-UserID", "<x-userid>");
request.AddHeader("X-CompanyID", "<x-companyid>");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'GET',
headers: {
'X-UserID': '<x-userid>',
'X-CompanyID': '<x-companyid>',
Authorization: 'Bearer <token>'
}
};
fetch('https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances"
headers = {
"X-UserID": "<x-userid>",
"X-CompanyID": "<x-companyid>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text){
"Success": true,
"ResultCode": "0000",
"Data": {
"Page": 1,
"PageSize": 50,
"TotalCount": 128,
"Items": [
{
"CustomerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CustomerCode": "<string>",
"CustomerName": "<string>",
"Balances": [
{
"CurrencyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CurrencyCode": "TRY",
"IsDefault": true,
"Debit": 123,
"Credit": 123,
"Balance": 123
}
]
}
]
},
"Message": "<string>"
}{
"Success": false,
"ResultCode": "0201",
"Message": "X-UserID header is required.",
"Errors": [
{
"Code": "0201",
"Message": "X-UserID header is required."
}
]
}{
"Success": false,
"ResultCode": "0102",
"Message": "Token has expired. Obtain a new token using the refresh token.",
"Errors": [
{
"Code": "0102",
"Message": "Token has expired. Obtain a new token using the refresh token."
}
]
}{
"Success": false,
"ResultCode": "0110",
"Message": "You do not have permission for this operation.",
"Errors": [
{
"Code": "0110",
"Message": "You do not have permission for this operation."
}
]
}{
"Success": false,
"ResultCode": "0120",
"Message": "Daily request limit (10000) exceeded.",
"Errors": [
{
"Code": "0120",
"Message": "Daily request limit (10000) exceeded."
}
]
}Customer balances
Company-wide balance per customer, per currency.
curl --request GET \
--url https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances \
--header 'Authorization: Bearer <token>' \
--header 'X-CompanyID: <x-companyid>' \
--header 'X-UserID: <x-userid>'using RestSharp;
var options = new RestClientOptions("https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("X-UserID", "<x-userid>");
request.AddHeader("X-CompanyID", "<x-companyid>");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'GET',
headers: {
'X-UserID': '<x-userid>',
'X-CompanyID': '<x-companyid>',
Authorization: 'Bearer <token>'
}
};
fetch('https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://dev.noyax.com/services/noyax_api/api/v1/finance/customers/balances"
headers = {
"X-UserID": "<x-userid>",
"X-CompanyID": "<x-companyid>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text){
"Success": true,
"ResultCode": "0000",
"Data": {
"Page": 1,
"PageSize": 50,
"TotalCount": 128,
"Items": [
{
"CustomerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CustomerCode": "<string>",
"CustomerName": "<string>",
"Balances": [
{
"CurrencyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CurrencyCode": "TRY",
"IsDefault": true,
"Debit": 123,
"Credit": 123,
"Balance": 123
}
]
}
]
},
"Message": "<string>"
}{
"Success": false,
"ResultCode": "0201",
"Message": "X-UserID header is required.",
"Errors": [
{
"Code": "0201",
"Message": "X-UserID header is required."
}
]
}{
"Success": false,
"ResultCode": "0102",
"Message": "Token has expired. Obtain a new token using the refresh token.",
"Errors": [
{
"Code": "0102",
"Message": "Token has expired. Obtain a new token using the refresh token."
}
]
}{
"Success": false,
"ResultCode": "0110",
"Message": "You do not have permission for this operation.",
"Errors": [
{
"Code": "0110",
"Message": "You do not have permission for this operation."
}
]
}{
"Success": false,
"ResultCode": "0120",
"Message": "Daily request limit (10000) exceeded.",
"Errors": [
{
"Code": "0120",
"Message": "Daily request limit (10000) exceeded."
}
]
}AsOfDate(optional, date + time, ISO 8601 — e.g.2026-09-25T14:30:00) counts only movements strictly before this date and time; if omitted, the current date and time is used. For example, sending2026-09-25T00:00:00excludes the 25th itself (from 00:00 onward) and everything after, including only movements up to the 24th; sending2026-09-25T14:30:00includes movements up to 14:30 on September 25th (that moment itself excluded) — adjust the time to get the balance at any point within a day.- There is no
StartDate: this differs from the customer transactions report, which has a date range. Here there is only a single cutoff, and all history up to that point is summed. - The response is grouped per customer: each customer has
CustomerCode/CustomerNameand aBalanceslist (per-currencyDebit/Credit/Balance). A customer with movements in more than one currency has more than one entry inBalances. - Only customers with at least one movement before
AsOfDateappear; customers with no movements at all are not returned. ExcludeZeroBalance(optional, defaults tofalse): whentrue, currency entries whose balance is exactly0are left out ofBalances; a customer whose every currency nets to0is left out of the list entirely (it does not come back with an emptyBalances). This filter applies before pagination, soTotalCountand page contents reflect it too.MinAbsoluteBalance(optional, number): when set, currency entries whose balance’s absolute value is less than or equal to this threshold are left out ofBalances(e.g. sending100excludes everything from-100to100inclusive — only balances with an absolute value strictly greater than100remain). Useful for filtering out small residual balances (e.g. rounding differences); can be combined withExcludeZeroBalance. This filter also applies before pagination.- Pagination (
page/pageSize, up to 50) is over the number of customers; a customer’s currencies always stay on the same page. There is no search parameter. Balance=Debit - Credit; a positive value means the customer owes the company.
Error codes
This endpoint has no endpoint-specific error codes. The general errors that apply to every endpoint (authentication, permissions, request headers, daily limit) still apply.Authorizations
Access token obtained from the Noyax auth service with your API key.
Headers
ID of the Noyax user the request is made on behalf of. Written to the audit fields of created, updated and deleted records.
x >= 1ID of the company. The user must be assigned to this company. All reads and writes are limited to this company.
x >= 1ID of the accounting period. Optional for customer endpoints; if sent, it is written to created records.
x >= 1Query Parameters
Page number, starting at 1. Defaults to 1.
Items per page, up to 50. Defaults to 50.
Only movements strictly before this date and time are included (e.g. sending the 25th excludes the 25th itself as well as later dates). ISO 8601, for example 2026-09-25T14:30:00. Defaults to the current date and time when omitted.
When true, currencies whose balance is exactly 0 are left out of Balances; a customer whose every currency nets to 0 is left out entirely. Defaults to false.
When set, currencies whose balance's absolute value is less than or equal to this are left out of Balances (e.g. 100 excludes everything from -100 to 100 inclusive); a customer whose every currency is filtered out this way is left out entirely. Can be combined with excludeZeroBalance. Omit for no threshold.
Response
OK
Whether the operation succeeded.
true
"0000" on success. On failure, the code of the first error; all errors are listed in Errors.
"0000"
Response data. Null when Success is false.
Show child attributes
Show child attributes
Error message when Success is false. Messages of all errors are joined into a single text.