Shipment Notes (Seller)
DRAFT, not yet in production. This endpoint is not available in any environment yet. The contract may change before release.
Overview
As a seller, you send a shipment note, also known as a despatch advice (DESADV), delivery note or ASN, when goods leave your site for orders you received on Consentio. Consentio matches each line to the order line it answers. When the shipment note is applied, each line's quantity is recorded as the despatched quantity of that order line, so the buyer sees what was shipped against what was ordered. Several shipment notes for the same order add up.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /v2/partner/{workspaceID}/shipment-notes |
Send a shipment note |
Dry run. Send the header X-Dry-Run: true to validate and match a shipment note without saving it: you get the response you would get, and nothing changes. Use it while building your integration.
Request fields
Shipment note
| Field | Required | Description |
|---|---|---|
number |
Yes | Your shipment note number, unique per supplier. Max 35 characters |
despatched_at |
Yes | When the goods left your site, RFC 3339 with a time zone offset |
lines |
Yes | The despatched lines, see below. May be empty for cancel |
function |
No | original (default), replace or cancel. replace and cancel only for a number already received |
issued_at |
No | When you issued the shipment note. If omitted, the time we received it |
estimated_delivery_at |
No | When the goods are expected at the delivery point. If omitted, the order's delivery date |
ship_to |
No | The delivery point (the shop), with at least one of gln (its GLN), buyer_code (the buyer's code for it, e.g. the shop code) or supplier_code (your customer code for it). If omitted, the order's delivery address. If sent, it must match the order |
Lines (lines[])
| Field | Required | Description |
|---|---|---|
order_number |
Yes | The Consentio order number, exactly as received in the order. Max 35 characters |
quantity |
Yes | Quantity despatched |
quantity_unit |
Yes | box, pallet, kg or piece |
gtin, buyer_code, supplier_code |
At least one | Article code: GTIN, the buyer's own article code, or your own code |
id |
No | Your identifier for the line, unique in the shipment note, echoed in the response. Max 6 characters |
order_line_number |
No | The order line this line answers, as given in the order (TBD: item id or line number). Max 35 characters |
description |
No | Article description, informative only. Max 256 characters |
lot |
No | Lot (batch) number; two lots of one article are two lines. Max 64 characters |
net_weight_kg |
No | Net weight of the line in kg, for articles sold or invoiced by weight (e.g. 18 boxes, 326.52 kg) |
best_before |
No | Best before date of the lot, YYYY-MM-DD |
packed_on |
No | Packing date, YYYY-MM-DD |
origin_country |
No | Country of origin, ISO 3166-1 alpha-2 code (e.g. ES) |
variety |
No | Variety of the product. Max 35 characters |
class |
No | Quality class or category (e.g. Extra, I, II). Max 35 characters |
caliber |
No | Caliber (size grade), e.g. 70/80. Max 35 characters |
sscc |
No | SSCC of the pallet or package the line is on: 18 digits, or the 20-digit scanner form with the 00 prefix |
See the API Reference for the full schema and examples.
Responses
| HTTP | When | Body |
|---|---|---|
| 201 | First version of this number, applied. Lines may still carry issues |
status: applied |
| 200 | Identical resend (stored result returned), or an accepted replace / cancel |
applied or cancelled |
| 202 | Received but held for review, nothing applied yet. The buyer resolves it in Consentio; you are not notified of the outcome | status: needs_review |
| 400 | Does not match the schema | INVALID_REQUEST |
| 404 | replace or cancel for a number never received |
SHIPMENT_NOTE_NOT_FOUND |
| 409 | Same number with different content sent as original; send replace |
DUPLICATE_DOCUMENT_NUMBER |
| 409 | Delivery outside the order's correction window (TBD: window length) | ORDER_NOT_SERVABLE |
| 422 | Order not found or not accepted. Check the order number is sent exactly as received | ORDER_NOT_FOUND, ORDER_NOT_ACCEPTED |
On 2xx responses, each line comes back with a status (matched, unmatched, held) and its issues:
| Issue | Meaning |
|---|---|
SHORT_SHIPPED |
Less despatched than ordered |
OVER_SHIPPED |
More despatched than ordered |
NOT_ORDERED |
The article is not on the order |
SUBSTITUTED |
Another article than the one ordered (TBD: whether substitutions are accepted) |
AMBIGUOUS_LINE |
The article matches several order lines |
UNIT_MISMATCH |
The unit cannot be converted to the order line's unit; the line is held |
Order lines that no shipment note line covered are listed in order_lines_not_despatched[].
Response fields
Result (200 / 201 / 202):
Result
| Field | Description |
|---|---|
number |
The shipment note number, echoed |
version |
The edition Consentio now holds: 1 for the original, +1 on each accepted replace. An identical resend or a cancel leaves it unchanged |
status |
applied, needs_review or cancelled |
lines |
One result per request line, in the same order as the request, see below |
order_lines_not_despatched |
The order lines nothing covered: order_number, order_line_number, buyer_code, ordered_quantity, quantity_unit |
Lines (lines[])
| Field | Description |
|---|---|
id |
Your line id, echoed when sent |
status |
matched, unmatched or held |
issues |
List of code (SHORT_SHIPPED, ...) + message |
Error (400 / 404 / 409 / 422):
Error
| Field | Description |
|---|---|
error_code |
INVALID_REQUEST, SHIPMENT_NOTE_NOT_FOUND, DUPLICATE_DOCUMENT_NUMBER, ORDER_NOT_SERVABLE, ORDER_NOT_FOUND or ORDER_NOT_ACCEPTED |
message |
Human-readable explanation |
errors |
Detail per line or field, when the error is tied to one, see below |
Errors (errors[])
| Field | Description |
|---|---|
index |
Position of the line in the request (0, 1, 2...) |
id |
Your line id, echoed when sent |
field |
The field at fault |
message |
What is wrong |
Examples: which response, and when
All examples use the same order and shipment note. You received order KX9P4Q2M7T:
| Order line | Article | buyer_code |
Ordered |
|---|---|---|---|
| 1 | Tomatoes | 10012345 |
40 box |
| 2 | Bananas | 10023456 |
20 box |
| 3 | Jonagold apples | 10034567 |
30 box |
and you send shipment note BL260098812 for it.
Nothing is ever half-applied. Either the whole shipment note is applied (201 or 200), or nothing is (202, 400, 409, 422).
| # | You send | You get | What to do |
|---|---|---|---|
| 1 | Every line as ordered | 201, status: applied, every line matched |
Nothing |
| 2 | 18 boxes of bananas instead of 20 | 201, the bananas line matched with issue SHORT_SHIPPED |
Nothing, the buyer is informed |
| 3 | An article that is not on the order | 201, that line unmatched with issue NOT_ORDERED |
Nothing, the buyer decides |
| 4 | No line for the tomatoes | 201, order line 1 listed in order_lines_not_despatched |
If you forgot them, send the full note again with function: replace |
| 5 | The same request again (timeout, retry) | 200, the same result as the first time | Nothing: resending an identical request is always safe |
| 6 | BL260098812 again with different content, as original |
409 DUPLICATE_DOCUMENT_NUMBER |
Send it again with function: replace |
| 7 | function: replace with the full corrected note |
200, status: applied, version: 2; the previous version no longer counts |
Nothing |
| 8 | function: cancel |
200, status: cancelled |
Nothing |
| 9 | quantity_unit: "boxes" |
400 INVALID_REQUEST, with the line and field at fault |
Fix it and send it again as original: nothing was stored |
| 10 | A truncated order number (KX9P4Q2M7) |
422 ORDER_NOT_FOUND |
Send the order number exactly as received |
| 11 | Boxes on a line the buyer ordered in kg | 202, status: needs_review, the line held with issue UNIT_MISMATCH. The whole shipment note is held, not only that line |
Nothing, the buyer resolves it in Consentio. You are not notified of the outcome |
| 12 | A replace after the order's correction window has closed |
409 ORDER_NOT_SERVABLE |
Contact the buyer |
| 13 | replace or cancel for BL260098821, a number never received (a typo) |
404 SHIPMENT_NOTE_NOT_FOUND |
Check the number. For a new note, send it as original |
Response bodies
201, applied with issues (cases 2, 3 and 4 together). You send bananas short, an article that was not ordered, and no tomatoes:
{
"number": "BL260098812",
"despatched_at": "2026-10-21T03:30:00+02:00",
"lines": [
{ "id": "1", "order_number": "KX9P4Q2M7T", "buyer_code": "10023456", "quantity": 18, "quantity_unit": "box" },
{ "id": "2", "order_number": "KX9P4Q2M7T", "buyer_code": "10034567", "quantity": 30, "quantity_unit": "box" },
{ "id": "3", "order_number": "KX9P4Q2M7T", "buyer_code": "10099999", "quantity": 5, "quantity_unit": "box" }
]
}
{
"number": "BL260098812",
"version": 1,
"status": "applied",
"lines": [
{ "id": "1", "status": "matched",
"issues": [{ "code": "SHORT_SHIPPED", "message": "ordered 20 box, despatched 18 box" }] },
{ "id": "2", "status": "matched", "issues": [] },
{ "id": "3", "status": "unmatched",
"issues": [{ "code": "NOT_ORDERED", "message": "10099999 is not on order KX9P4Q2M7T" }] }
],
"order_lines_not_despatched": [
{ "order_number": "KX9P4Q2M7T", "order_line_number": "1", "buyer_code": "10012345",
"ordered_quantity": 40, "quantity_unit": "box" }
]
}
400, invalid request (case 9):
{
"error_code": "INVALID_REQUEST",
"message": "lines[0].quantity_unit must be one of box, pallet, kg, piece",
"errors": [
{ "index": 0, "id": "1", "field": "quantity_unit", "message": "must be one of box, pallet, kg, piece" }
]
}
409, duplicate number (case 6):
{
"error_code": "DUPLICATE_DOCUMENT_NUMBER",
"message": "BL260098812 was already received with different content; send function replace"
}
422, order not found (case 10):
{
"error_code": "ORDER_NOT_FOUND",
"message": "order KX9P4Q2M7 not found",
"errors": [
{ "index": 0, "id": "1", "field": "order_number", "message": "order KX9P4Q2M7 not found" }
]
}