curl --request POST \
--url https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--header 'Idempotency-Key: <idempotency-key>' \
--form file=@example-file \
--form documentDate=2023-12-25 \
--form signedWet=falseimport requests
url = "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"documentDate": "2023-12-25",
"signedWet": "false"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('documentDate', '2023-12-25');
form.append('signedWet', 'false');
const options = {
method: 'POST',
headers: {'Idempotency-Key': '<idempotency-key>', Authorization: 'Bearer <token>'}
};
options.body = form;
fetch('https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents', 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/documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data",
"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/documents"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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/documents")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents")
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.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"type": "COC_EXTRACT",
"status": "ACTIVE",
"originalFilename": "<string>",
"uploadDate": "2023-11-07T05:31:56Z",
"fileUrl": "<string>",
"documentDate": "2023-12-25",
"signedWet": true
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"traceId": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"traceId": "<string>"
}Upload proof-of-payment document for one shipment.
Files the proof against the half the payment was recorded on, which is
what lets readyForPickup become true for a split order.
Allowed types: PAYMENT_BANK_TRANSFER_SCREENSHOT, PAYMENT_CONFIRMATION,
PAYMENT_SOURCE_OF_FUNDS_DECLARATION.
curl --request POST \
--url https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--header 'Idempotency-Key: <idempotency-key>' \
--form file=@example-file \
--form documentDate=2023-12-25 \
--form signedWet=falseimport requests
url = "https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"documentDate": "2023-12-25",
"signedWet": "false"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('documentDate', '2023-12-25');
form.append('signedWet', 'false');
const options = {
method: 'POST',
headers: {'Idempotency-Key': '<idempotency-key>', Authorization: 'Bearer <token>'}
};
options.body = form;
fetch('https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents', 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/documents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data",
"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/documents"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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/documents")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novatrade24.com/v1/partners/{sellerId}/orders/{uuid}/shipments/{shipmentId}/payment/documents")
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.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2023-12-25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signedWet\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"type": "COC_EXTRACT",
"status": "ACTIVE",
"originalFilename": "<string>",
"uploadDate": "2023-11-07T05:31:56Z",
"fileUrl": "<string>",
"documentDate": "2023-12-25",
"signedWet": true
}{
"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
Document type enumeration reused from the NT24 platform taxonomy: the
types a caller can file through this API. Only values relevant to the
allowed set of each endpoint are accepted; UNCATEGORIZED and
*_ADDITIONAL_INFORMATION variants are rejected at the API boundary.
A stored document reports its type as StoredDocumentType, which also
carries those.
COC_EXTRACT, COC_COMPANY_ONLINE_PRESENCE, COC_LETTER_OF_AUTHORIZATION, BANK_ACCOUNT_DETAILS, BANK_ACCOUNT_LETTERHEAD, BANK_STATEMENT, VAT_STATEMENT, VAT_RETURN, CONTACT_DOCUMENT, CONTACT_FACE_PICTURE, CONTACT_ID_CARD, CONTACT_PASSPORT, CONTACT_DRIVERS_LICENSE, CONTACT_PICTURE_OF_MEETING, CONTACT_PROFILE_PICTURE, CONTACT_VERIFICATION_REPORT, TP_TRADEPARTNER_PICTURE, TP_PROFILE_PICTURE, ADDRESS_SCREENSHOT, ORDER_PURCHASING_CONTRACT, SHIPMENT_INVOICE, SHIPMENT_PRELIMINARY_INVOICE, SHIPMENT_DEPOSIT_AGREEMENT, PAYMENT_BANK_TRANSFER_SCREENSHOT, PAYMENT_CONFIRMATION, PAYMENT_SOURCE_OF_FUNDS_DECLARATION, TRANSPORT_CMR, TRANSPORT_CMR_DELIVERY, TRANSPORT_PICTURE_OF_TRANSPORT, TRANSPORT_CONFIRMATION_OF_ARRIVAL Response
Document uploaded.
Document identifier (also used as storage key).
The type of a document on file, as responses report it. Every value
of DocumentType, plus the types the Novatrade24 web app files and
this API refuses on upload: UNCATEGORIZED and the
*_ADDITIONAL_INFORMATION variants. Such a document can sit on one of
your orders or buyers, and archiving or restoring it through
PATCH /documents/{id} returns it with its type as stored.
Response-only: never accepted as a request value.
COC_EXTRACT, COC_COMPANY_ONLINE_PRESENCE, COC_LETTER_OF_AUTHORIZATION, COC_ADDITIONAL_INFORMATION, BANK_ACCOUNT_DETAILS, BANK_ACCOUNT_LETTERHEAD, BANK_STATEMENT, BANK_ADDITIONAL_INFORMATION, VAT_STATEMENT, VAT_RETURN, VAT_ADDITIONAL_INFORMATION, CONTACT_DOCUMENT, CONTACT_FACE_PICTURE, CONTACT_ID_CARD, CONTACT_PASSPORT, CONTACT_DRIVERS_LICENSE, CONTACT_PICTURE_OF_MEETING, CONTACT_PROFILE_PICTURE, CONTACT_VERIFICATION_REPORT, CONTACT_ADDITIONAL_INFORMATION, TP_TRADEPARTNER_PICTURE, TP_PROFILE_PICTURE, TP_ADDITIONAL_INFORMATION, ADDRESS_SCREENSHOT, ADDRESS_ADDITIONAL_INFORMATION, ORDER_PURCHASING_CONTRACT, ORDER_ADDITIONAL_INFORMATION, SHIPMENT_INVOICE, SHIPMENT_PRELIMINARY_INVOICE, SHIPMENT_DEPOSIT_AGREEMENT, PAYMENT_BANK_TRANSFER_SCREENSHOT, PAYMENT_CONFIRMATION, PAYMENT_ADDITIONAL_INFORMATION, PAYMENT_SOURCE_OF_FUNDS_DECLARATION, TRANSPORT_CMR, TRANSPORT_CMR_DELIVERY, TRANSPORT_PICTURE_OF_TRANSPORT, TRANSPORT_CONFIRMATION_OF_ARRIVAL, UNCATEGORIZED ACTIVE, ARCHIVED Relative URL to document-download endpoint.