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" }
  ]
}