curl --request PUT \
--url https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers/{bankTransferId} \
--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/{bankTransferId}");
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.PutAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'PUT',
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/{bankTransferId}', 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/{bankTransferId}"
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.put(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": "8109",
"Message": "The bank voucher has been posted to accounting and can no longer be updated.",
"Errors": [
{
"Code": "8109",
"Message": "The bank voucher has been posted to accounting and can no longer be updated."
}
]
}{
"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": "8100",
"Message": "Bank transfer not found.",
"Errors": [
{
"Code": "8100",
"Message": "Bank transfer not found."
}
]
}{
"Success": false,
"ResultCode": "0120",
"Message": "Daily request limit (10000) exceeded.",
"Errors": [
{
"Code": "0120",
"Message": "Daily request limit (10000) exceeded."
}
]
}Update bank transfer
Replaces all fields of the voucher and its lines.
curl --request PUT \
--url https://dev.noyax.com/services/noyax_api/api/v1/finance/bank-transfers/{bankTransferId} \
--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/{bankTransferId}");
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.PutAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'PUT',
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/{bankTransferId}', 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/{bankTransferId}"
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.put(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": "8109",
"Message": "The bank voucher has been posted to accounting and can no longer be updated.",
"Errors": [
{
"Code": "8109",
"Message": "The bank voucher has been posted to accounting and can no longer be updated."
}
]
}{
"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": "8100",
"Message": "Bank transfer not found.",
"Errors": [
{
"Code": "8100",
"Message": "Bank transfer not found."
}
]
}{
"Success": false,
"ResultCode": "0120",
"Message": "Daily request limit (10000) exceeded.",
"Errors": [
{
"Code": "0120",
"Message": "Daily request limit (10000) exceeded."
}
]
}PATCH changes only the fields you send.
TransferType cannot be changed, and VoucherNumber cannot be "Next". A posted voucher cannot be updated. See the overview page for line identity on update and the closed-record lock.
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) |
8100 | 404 | Bank transfer not found |
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 |
8109 | 400 | The voucher has been posted to accounting and can no longer be updated or deleted |
8110 | 400 | SharingCode is not one of the user’s sharing codes |
8111 | 400 | TransferType cannot be changed after the voucher is created |
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 |
8207 | 400 | The line’s customer record has been closed, operation cancelled |
8208 | 400 | A payment plan has been created for the line’s customer record, operation cancelled |
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 >= 1Path Parameters
Bank transfer ID.
Body
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
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.