Skip to content

Push sales lines (bulk)

POST
/sales
curl --request POST \
--url https://api.europlaybook.com/v1/sales \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "lines": [ { "channel": "webshop", "external_id": "order-1001-line-1", "quantity": 2, "ship_from_country": "NL", "ship_to_country": "BE", "sku": "TEA-001", "sold_on": "2026-10-01" } ] }'

Up to 1000 lines per call, idempotent on external_id per account: a line sent again with the same values is unchanged, with new values it is updated. Lines a closed or filed period covers are returned in held and not stored. No personal data: unknown fields are refused.

Media typeapplication/json
SalesPushIn
object
lines
required
Lines

Up to 1000 lines per call.

Array<object>
>= 1 items <= 1000 items
SalesLineIn

One sales (or return) line. No personal data: no names, addresses or e-mails.

object
external_id
required
External Id

Your unique id for this line; sending it again updates the line.

string
>= 1 characters <= 200 characters
sku
required
Sku

Your SKU; matched to a product.

string
>= 1 characters <= 200 characters
sold_on
required
Sold On

Sale (or return) date.

string format: date
quantity
required
Quantity

Units (positive; use kind=return for returns).

integer
>= 1 <= 10000000
kind
Kind
string
default: sale
Allowed values: sale return
ship_from_country
required
Ship From Country

ISO 3166-1 alpha-2.

string
>= 2 characters <= 2 characters
ship_to_country
required
Ship To Country

ISO 3166-1 alpha-2.

string
>= 2 characters <= 2 characters
legal_entity_id
Any of:
string format: uuid
channel
Channel
string
default: other
Allowed values: webshop bol amazon odoo other
marketplace
Any of:
string
<= 32 characters
buyer_type
Buyer Type
string
default: unknown
Allowed values: consumer business_end_user reseller unknown
fulfilment
Fulfilment
string
default: own
Allowed values: own fba lvb 3pl
net_amount_cents
Any of:
integer
currency
Currency
string
default: EUR >= 3 characters <= 3 characters

OK

Media typeapplication/json
SalesPushOut
object
created
required
Created

New lines.

integer
updated
required
Updated

Lines whose values changed.

integer
unchanged
required
Unchanged

Lines sent before with the same values.

integer
held
required
Held

External_ids not stored because a closed or filed period covers them (reopen it first).

Array<string>
unknown_skus
required
Unknown Skus

SKUs without a product (stored; map or create the product).

Array<string>

Example generated

{
"created": 1,
"updated": 1,
"unchanged": 1,
"held": [
"example"
],
"unknown_skus": [
"example"
]
}

Bad Request

Media typeapplication/json
PublicErrorOut
object
detail
required
Detail

What went wrong, in English, for people and logs.

string
code
required
Code

Stable machine-readable error code; translate and branch on this.

string
params
Any of:
object
key
additional properties
any

Example

{
"detail": "This API key lacks the scope catalogue:write",
"code": "insufficient_scope",
"params": {
"required_scope": "catalogue:write"
}
}

Unauthorized

Media typeapplication/json
PublicErrorOut
object
detail
required
Detail

What went wrong, in English, for people and logs.

string
code
required
Code

Stable machine-readable error code; translate and branch on this.

string
params
Any of:
object
key
additional properties
any

Example

{
"detail": "This API key lacks the scope catalogue:write",
"code": "insufficient_scope",
"params": {
"required_scope": "catalogue:write"
}
}

Forbidden

Media typeapplication/json
PublicErrorOut
object
detail
required
Detail

What went wrong, in English, for people and logs.

string
code
required
Code

Stable machine-readable error code; translate and branch on this.

string
params
Any of:
object
key
additional properties
any

Example

{
"detail": "This API key lacks the scope catalogue:write",
"code": "insufficient_scope",
"params": {
"required_scope": "catalogue:write"
}
}

Not Found

Media typeapplication/json
PublicErrorOut
object
detail
required
Detail

What went wrong, in English, for people and logs.

string
code
required
Code

Stable machine-readable error code; translate and branch on this.

string
params
Any of:
object
key
additional properties
any

Example

{
"detail": "This API key lacks the scope catalogue:write",
"code": "insufficient_scope",
"params": {
"required_scope": "catalogue:write"
}
}

Conflict

Media typeapplication/json
PublicErrorOut
object
detail
required
Detail

What went wrong, in English, for people and logs.

string
code
required
Code

Stable machine-readable error code; translate and branch on this.

string
params
Any of:
object
key
additional properties
any

Example

{
"detail": "This API key lacks the scope catalogue:write",
"code": "insufficient_scope",
"params": {
"required_scope": "catalogue:write"
}
}

Unprocessable Content

Media typeapplication/json
PublicValidationErrorOut
object
detail
required
Detail

What went wrong, in English, for people and logs.

string
code
required
Code

Stable machine-readable error code; translate and branch on this.

string
params
Any of:
object
key
additional properties
any
errors
Errors

Per-field problems (pydantic format: loc, msg, type).

Array<object>
default:
object
key
additional properties
any

Example

{
"detail": "This API key lacks the scope catalogue:write",
"code": "insufficient_scope",
"params": {
"required_scope": "catalogue:write"
},
"errors": []
}

Too Many Requests

Media typeapplication/json
PublicErrorOut
object
detail
required
Detail

What went wrong, in English, for people and logs.

string
code
required
Code

Stable machine-readable error code; translate and branch on this.

string
params
Any of:
object
key
additional properties
any

Example

{
"detail": "This API key lacks the scope catalogue:write",
"code": "insufficient_scope",
"params": {
"required_scope": "catalogue:write"
}
}