curl --request POST \
--url https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-CompanyID: <x-companyid>' \
--header 'X-UserID: <x-userid>' \
--data '
{
"TransferType": 1,
"VoucherNumber": "Next",
"Date": "2026-09-24T14:06:00",
"BankAccountCode": "TEST POS",
"Description": "<string>",
"SharingCode": "<string>",
"Lines": [
{
"CustomerCode": "C-0001",
"Amount": 500,
"ExchangeRate": 1,
"Description": "<string>",
"CustomerAmount": 123,
"CustomerCurrencyCode": "<string>",
"CustomerExchangeRate": 123
}
]
}
'using RestSharp;
var options = new RestClientOptions("https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers");
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>");
request.AddJsonBody("{\n \"TransferType\": 1,\n \"VoucherNumber\": \"Next\",\n \"Date\": \"2026-09-24T14:06:00\",\n \"BankAccountCode\": \"TEST POS\",\n \"Description\": \"<string>\",\n \"SharingCode\": \"<string>\",\n \"Lines\": [\n {\n \"CustomerCode\": \"C-0001\",\n \"Amount\": 500,\n \"ExchangeRate\": 1,\n \"Description\": \"<string>\",\n \"CustomerAmount\": 123,\n \"CustomerCurrencyCode\": \"<string>\",\n \"CustomerExchangeRate\": 123\n }\n ]\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'POST',
headers: {
'X-UserID': '<x-userid>',
'X-CompanyID': '<x-companyid>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
TransferType: 1,
VoucherNumber: 'Next',
Date: '2026-09-24T14:06:00',
BankAccountCode: 'TEST POS',
Description: '<string>',
SharingCode: '<string>',
Lines: [
{
CustomerCode: 'C-0001',
Amount: 500,
ExchangeRate: 1,
Description: '<string>',
CustomerAmount: 123,
CustomerCurrencyCode: '<string>',
CustomerExchangeRate: 123
}
]
})
};
fetch('https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers', 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/bank-transfers"
payload = {
"TransferType": 1,
"VoucherNumber": "Next",
"Date": "2026-09-24T14:06:00",
"BankAccountCode": "TEST POS",
"Description": "<string>",
"SharingCode": "<string>",
"Lines": [
{
"CustomerCode": "C-0001",
"Amount": 500,
"ExchangeRate": 1,
"Description": "<string>",
"CustomerAmount": 123,
"CustomerCurrencyCode": "<string>",
"CustomerExchangeRate": 123
}
]
}
headers = {
"X-UserID": "<x-userid>",
"X-CompanyID": "<x-companyid>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"Success": true,
"ResultCode": "0000",
"Data": {
"Id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"TransferType": 1,
"VoucherNumber": "5466CACC0016",
"Date": "2023-11-07T05:31:56Z",
"BankAccountCode": "TEST POS",
"BankAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CurrencyCode": "<string>",
"CurrencyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ExchangeRate": 123,
"Amount": 123,
"Description": "<string>",
"SharingCode": "<string>",
"SharingCodeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"IsPosted": true,
"CreateDate": "2023-11-07T05:31:56Z",
"ModifyDate": "2023-11-07T05:31:56Z",
"Lines": [
{
"CustomerName": "<string>",
"CustomerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CustomerCurrencyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CustomerCode": "C-0001",
"Amount": 500,
"ExchangeRate": 1,
"Description": "<string>",
"CustomerAmount": 123,
"CustomerCurrencyCode": "<string>",
"CustomerExchangeRate": 123
}
]
},
"Message": "<string>"
}{
"Success": false,
"ResultCode": "8108",
"Message": "At least one line is required.",
"Errors": [
{
"Code": "8108",
"Message": "At least one line 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."
}
]
}Create bank transfer
Adds a new bank transfer voucher with its lines in one transaction.
curl --request POST \
--url https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-CompanyID: <x-companyid>' \
--header 'X-UserID: <x-userid>' \
--data '
{
"TransferType": 1,
"VoucherNumber": "Next",
"Date": "2026-09-24T14:06:00",
"BankAccountCode": "TEST POS",
"Description": "<string>",
"SharingCode": "<string>",
"Lines": [
{
"CustomerCode": "C-0001",
"Amount": 500,
"ExchangeRate": 1,
"Description": "<string>",
"CustomerAmount": 123,
"CustomerCurrencyCode": "<string>",
"CustomerExchangeRate": 123
}
]
}
'using RestSharp;
var options = new RestClientOptions("https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers");
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>");
request.AddJsonBody("{\n \"TransferType\": 1,\n \"VoucherNumber\": \"Next\",\n \"Date\": \"2026-09-24T14:06:00\",\n \"BankAccountCode\": \"TEST POS\",\n \"Description\": \"<string>\",\n \"SharingCode\": \"<string>\",\n \"Lines\": [\n {\n \"CustomerCode\": \"C-0001\",\n \"Amount\": 500,\n \"ExchangeRate\": 1,\n \"Description\": \"<string>\",\n \"CustomerAmount\": 123,\n \"CustomerCurrencyCode\": \"<string>\",\n \"CustomerExchangeRate\": 123\n }\n ]\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'POST',
headers: {
'X-UserID': '<x-userid>',
'X-CompanyID': '<x-companyid>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
TransferType: 1,
VoucherNumber: 'Next',
Date: '2026-09-24T14:06:00',
BankAccountCode: 'TEST POS',
Description: '<string>',
SharingCode: '<string>',
Lines: [
{
CustomerCode: 'C-0001',
Amount: 500,
ExchangeRate: 1,
Description: '<string>',
CustomerAmount: 123,
CustomerCurrencyCode: '<string>',
CustomerExchangeRate: 123
}
]
})
};
fetch('https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers', 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/bank-transfers"
payload = {
"TransferType": 1,
"VoucherNumber": "Next",
"Date": "2026-09-24T14:06:00",
"BankAccountCode": "TEST POS",
"Description": "<string>",
"SharingCode": "<string>",
"Lines": [
{
"CustomerCode": "C-0001",
"Amount": 500,
"ExchangeRate": 1,
"Description": "<string>",
"CustomerAmount": 123,
"CustomerCurrencyCode": "<string>",
"CustomerExchangeRate": 123
}
]
}
headers = {
"X-UserID": "<x-userid>",
"X-CompanyID": "<x-companyid>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"Success": true,
"ResultCode": "0000",
"Data": {
"Id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"TransferType": 1,
"VoucherNumber": "5466CACC0016",
"Date": "2023-11-07T05:31:56Z",
"BankAccountCode": "TEST POS",
"BankAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CurrencyCode": "<string>",
"CurrencyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ExchangeRate": 123,
"Amount": 123,
"Description": "<string>",
"SharingCode": "<string>",
"SharingCodeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"IsPosted": true,
"CreateDate": "2023-11-07T05:31:56Z",
"ModifyDate": "2023-11-07T05:31:56Z",
"Lines": [
{
"CustomerName": "<string>",
"CustomerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CustomerCurrencyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"CustomerCode": "C-0001",
"Amount": 500,
"ExchangeRate": 1,
"Description": "<string>",
"CustomerAmount": 123,
"CustomerCurrencyCode": "<string>",
"CustomerExchangeRate": 123
}
]
},
"Message": "<string>"
}{
"Success": false,
"ResultCode": "8108",
"Message": "At least one line is required.",
"Errors": [
{
"Code": "8108",
"Message": "At least one line 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."
}
]
}Error codes
Codes this endpoint can return. The general errors that apply to every endpoint (authentication, permissions, request headers, daily limit) are not repeated here.| Code | HTTP | Meaning |
|---|---|---|
0002 | 400 | Request body could not be read (malformed JSON, wrong field type) |
0003 | 400 | A field exceeds its maximum length (the message names the field and the limit) |
0580 | 400 | A value given as text (a code or a name) matches more than one record; add the detail that tells them apart (for example City for a district, Country for a city) |
8101 | 400 | TransferType must be 1 (incoming) or 2 (outgoing) |
8102 | 400 | VoucherNumber is required |
8103 | 400 | VoucherNumber is already used in the company (among all bank voucher types) |
8104 | 400 | VoucherNumber cannot be “Next” on update |
8105 | 400 | Date is required |
8106 | 400 | BankAccountCode is required |
8107 | 400 | BankAccountCode was not found |
8108 | 400 | At least one line is required |
8110 | 400 | SharingCode is not one of the user’s sharing codes |
8180 | 400 | No "BANKAFİŞNO" serial number definition was found for the company |
8181 | 400 | The serial number definition has no detail rows |
8182 | 400 | Unsupported serial number part type |
8183 | 400 | The generated voucher number exceeds the maximum length |
8184 | 400 | The generated voucher number is already used in the company |
8185 | 400 | The voucher number could not be generated |
8200 | 400 | Line CustomerCode is required |
8201 | 400 | Customer not found for the line |
8202 | 400 | Line Amount must be greater than 0 |
8203 | 400 | Line ExchangeRate (or CustomerExchangeRate) is required and must be greater than 0 |
8204 | 400 | Line CustomerCurrencyCode was not found |
8205 | 400 | Line CustomerAmount x CustomerExchangeRate does not equal Amount x ExchangeRate |
8206 | 400 | Line CustomerAmount and CustomerCurrencyCode must be sent together |
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 >= 1Body
Required. 1: Incoming transfer (Gelen EFT/Havale), 2: Outgoing transfer (Giden EFT/Havale). Cannot be changed after the voucher is created.
1
Required. Voucher number, unique within the company among all bank vouchers. Send "Next" on create to generate it from the company's bank voucher number series. At most 20 characters.
"Next"
Required. Voucher date. If a time is sent it is stored as the voucher time, otherwise the current time is used.
"2026-09-24T14:06:00"
Required. Bank account name (Name from GET /api/v1/finance/bank-accounts). All lines are recorded against this account.
"TEST POS"
Description. At most 1000 characters.
Sharing code that limits who can see the voucher. Empty means visible to everyone; otherwise it must be one of the user's sharing codes.
Required, at least one line.
Show child attributes
Show child attributes
Response
Created
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.