curl --request POST \
--url https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data @- <<EOF
{
"paymentDate": "2023-12-25",
"bankAmount": {
"value": 7900,
"currency": "EUR"
},
"cashAmount": {
"value": 7900,
"currency": "EUR"
},
"sourceIban": "DE89370400440532013000",
"sourceAccountComment": "Paid from the managing director's private account; the company account was frozen."
}
EOFimport requests
url = "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment"
payload = {
"paymentDate": "2023-12-25",
"bankAmount": {
"value": 7900,
"currency": "EUR"
},
"cashAmount": {
"value": 7900,
"currency": "EUR"
},
"sourceIban": "DE89370400440532013000",
"sourceAccountComment": "Paid from the managing director's private account; the company account was frozen."
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
paymentDate: '2023-12-25',
bankAmount: {value: 7900, currency: 'EUR'},
cashAmount: {value: 7900, currency: 'EUR'},
sourceIban: 'DE89370400440532013000',
sourceAccountComment: 'Paid from the managing director\'s private account; the company account was frozen.'
})
};
fetch('https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'paymentDate' => '2023-12-25',
'bankAmount' => [
'value' => 7900,
'currency' => 'EUR'
],
'cashAmount' => [
'value' => 7900,
'currency' => 'EUR'
],
'sourceIban' => 'DE89370400440532013000',
'sourceAccountComment' => 'Paid from the managing director\'s private account; the company account was frozen.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment"
payload := strings.NewReader("{\n \"paymentDate\": \"2023-12-25\",\n \"bankAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"cashAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"sourceIban\": \"DE89370400440532013000\",\n \"sourceAccountComment\": \"Paid from the managing director's private account; the company account was frozen.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"paymentDate\": \"2023-12-25\",\n \"bankAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"cashAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"sourceIban\": \"DE89370400440532013000\",\n \"sourceAccountComment\": \"Paid from the managing director's private account; the company account was frozen.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"paymentDate\": \"2023-12-25\",\n \"bankAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"cashAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"sourceIban\": \"DE89370400440532013000\",\n \"sourceAccountComment\": \"Paid from the managing director's private account; the company account was frozen.\"\n}"
response = http.request(request)
puts response.read_body{
"paymentDate": "2023-12-25",
"bankAmount": {
"value": 7900,
"currency": "EUR"
},
"cashAmount": {
"value": 7900,
"currency": "EUR"
},
"sourceIban": "DE89370400440532013000",
"sourceAccountComment": "Paid from the managing director's private account; the company account was frozen.",
"status": "DRAFT",
"amountMatchesInvoice": true,
"ibanConsistent": true,
"readyForPickup": true,
"version": 123,
"updatedAt": "2023-11-07T05:31:56Z"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"traceId": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"traceId": "<string>"
}Submit payment data for one shipment.
Upsert by shipment: one payment record per shipment, so a second call corrects the first. The only way to record a payment on an order NT24 has split across more than one shipment.
curl --request POST \
--url https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data @- <<EOF
{
"paymentDate": "2023-12-25",
"bankAmount": {
"value": 7900,
"currency": "EUR"
},
"cashAmount": {
"value": 7900,
"currency": "EUR"
},
"sourceIban": "DE89370400440532013000",
"sourceAccountComment": "Paid from the managing director's private account; the company account was frozen."
}
EOFimport requests
url = "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment"
payload = {
"paymentDate": "2023-12-25",
"bankAmount": {
"value": 7900,
"currency": "EUR"
},
"cashAmount": {
"value": 7900,
"currency": "EUR"
},
"sourceIban": "DE89370400440532013000",
"sourceAccountComment": "Paid from the managing director's private account; the company account was frozen."
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
paymentDate: '2023-12-25',
bankAmount: {value: 7900, currency: 'EUR'},
cashAmount: {value: 7900, currency: 'EUR'},
sourceIban: 'DE89370400440532013000',
sourceAccountComment: 'Paid from the managing director\'s private account; the company account was frozen.'
})
};
fetch('https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'paymentDate' => '2023-12-25',
'bankAmount' => [
'value' => 7900,
'currency' => 'EUR'
],
'cashAmount' => [
'value' => 7900,
'currency' => 'EUR'
],
'sourceIban' => 'DE89370400440532013000',
'sourceAccountComment' => 'Paid from the managing director\'s private account; the company account was frozen.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment"
payload := strings.NewReader("{\n \"paymentDate\": \"2023-12-25\",\n \"bankAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"cashAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"sourceIban\": \"DE89370400440532013000\",\n \"sourceAccountComment\": \"Paid from the managing director's private account; the company account was frozen.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"paymentDate\": \"2023-12-25\",\n \"bankAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"cashAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"sourceIban\": \"DE89370400440532013000\",\n \"sourceAccountComment\": \"Paid from the managing director's private account; the company account was frozen.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"paymentDate\": \"2023-12-25\",\n \"bankAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"cashAmount\": {\n \"value\": 7900,\n \"currency\": \"EUR\"\n },\n \"sourceIban\": \"DE89370400440532013000\",\n \"sourceAccountComment\": \"Paid from the managing director's private account; the company account was frozen.\"\n}"
response = http.request(request)
puts response.read_body{
"paymentDate": "2023-12-25",
"bankAmount": {
"value": 7900,
"currency": "EUR"
},
"cashAmount": {
"value": 7900,
"currency": "EUR"
},
"sourceIban": "DE89370400440532013000",
"sourceAccountComment": "Paid from the managing director's private account; the company account was frozen.",
"status": "DRAFT",
"amountMatchesInvoice": true,
"ibanConsistent": true,
"readyForPickup": true,
"version": 123,
"updatedAt": "2023-11-07T05:31:56Z"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"traceId": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"traceId": "<string>"
}Authorizations
OAuth 2.0 client_credentials grant via Keycloak service account.
Clients are provisioned per IntegrationOrganization in the
nt24-idp realm.
Headers
Client-generated unique key (UUID recommended) for this write operation.
Identical key + identical body within 24h returns the cached response.
Identical key + different body returns 422.
1 - 255Path Parameters
UUID of the seller trade partner (must be in caller's authorized list).
UUID of one live shipment of the order in the path, as the order's
shipmentIds list them. A shipment that is not this order's live
shipment is 404, whether it belongs to another order or no longer
exists.
Body
Show child attributes
Show child attributes
Show child attributes
Show child attributes
"DE89370400440532013000"
Why the payment came from a bank account that is not registered
with Novatrade24. The payment is stored without it, but an order
whose payment is not from a registered account (ibanConsistent: false) cannot be completed until a comment is on file — the same
rule the platform applies to its own users. Absent or blank leaves
any comment already on the payment untouched. On a response it is
the comment on file, whether sent here or entered by NT24 staff.
"Paid from the managing director's private account; the company account was frozen."
Response
Payment stored.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
"DE89370400440532013000"
Why the payment came from a bank account that is not registered
with Novatrade24. The payment is stored without it, but an order
whose payment is not from a registered account (ibanConsistent: false) cannot be completed until a comment is on file — the same
rule the platform applies to its own users. Absent or blank leaves
any comment already on the payment untouched. On a response it is
the comment on file, whether sent here or entered by NT24 staff.
"Paid from the managing director's private account; the company account was frozen."
DRAFT, SUBMITTED, VALID, INVALID Payment recorded and evidenced: paymentDate is set and an
active proof of payment — a PAYMENT_BANK_TRANSFER_SCREENSHOT
or a PAYMENT_CONFIRMATION, either one — is filed against the
order, plus a source-of-funds declaration once cash reaches
€10,000.
Derived on every read, and it can turn back to false — raising
the cash amount past the threshold makes the order wait for the
declaration. On an order split across several shipments, every
shipment answers.