Set your delivery bands
PUT/v1/company/shipping-absorption
scope company.write
Replaces the whole set for one country, scope AND parcel_tier. parcel_tier is REQUIRED: each destination carries two independent sets and writing one does not touch the other, so a default would quietly rewrite the small-parcel bands while you believed you had set both. Bands are half-open [min, max): a band's max_amount must EQUAL the next band's min_amount — writing 49999 then 50000 leaves a one-cent hole and the set is refused. The first band starts at 0, the last has max_amount: null. Amounts are in minor units. An empty bands array means you absorb delivery on everything.
Request body#
| Field | Type | Required | Description |
|---|---|---|---|
country_code | string | optional | The DESTINATION this set applies to, as ISO-2. Omit it to write the scope's default set, used for every destination with no set of its own. Must be a country you sell into (country_not_supported, 422) — see GET /v1/company/selling-countries. |
scope | string | optional | Defaults to local. The origin is always your own country, so this is decided by the destination: same country is local, anywhere else is international. They behave nothing alike — a domestic parcel is a few lei, a cross-border one can cost more than the product.Accepts |
parcel_tier | string | required | Which size of parcel this set covers. small is accessories and small parcels; large is bikes and large or extra-large parcels. Each destination has a SEPARATE set per tier, so writing one leaves the other exactly as it was — absorbing delivery on a 300-lei accessory is a very different promise from absorbing it on a bike. Missing gives parcel_tier_required (422), an unknown value invalid_parcel_tier (422).Accepts |
currency | string | optional | Which currency the band amounts are in. Defaults to the currency already on the set. |
bands | array | required | The complete ladder, which REPLACES whatever was there — this is not a merge. Required (field_required, 400). Rejections come back as invalid_bands (422) with every reason listed at once rather than one per round trip. |
bands[]. | integer | optional | Where the band starts, in minor units, INCLUSIVE. Defaults to 0. The first band must start at 0, and each band must start exactly where the previous one ended — a gap and an overlap are the same mistake and get the same message. |
bands[]. | integer | optional | Where the band ends, EXCLUSIVE — an order at exactly this amount falls into the next band. null means no upper limit, which only the LAST band may have, and the last band must have it. A band must end above where it starts. |
bands[]. | boolean | optional | Whether YOU pay the delivery for orders in this band. Defaults to false, which means the buyer pays it at checkout. Absorption is also capped at what the order earns you: on an order where the delivery would exceed that, the buyer is charged regardless of what this says. |
Example
{
"country_code": "ES",
"scope": "local",
"parcel_tier": "large",
"currency": "EUR",
"bands": [
{
"min_amount": 0,
"max_amount": 50000,
"absorbs": false
},
{
"min_amount": 50000,
"max_amount": null,
"absorbs": true
}
]
}Response#
Example
{
"sets": [
{
"country_code": "HU",
"scope": "international",
"parcel_tier": "small",
"currency": "EUR",
"bands": [
{
"min_amount": 0,
"max_amount": 50000,
"absorbs": false
},
{
"min_amount": 50000,
"max_amount": null,
"absorbs": true
}
]
},
{
"country_code": "HU",
"scope": "international",
"parcel_tier": "large",
"currency": "EUR",
"bands": [
{
"min_amount": 0,
"max_amount": null,
"absorbs": false
}
]
}
],
"parcel_tiers": {
"small": "Accessories and small parcels — billed on the small-courier tariff.",
"large": "Bikes, large and extra-large items — the expensive tariff."
},
"note": "Bands compare the seller-group subtotal, in minor units. A band with absorbs=false means the buyer pays delivery at checkout. Each destination has a SEPARATE set per parcel_tier — writing one does not touch the other.",
"band_rules": {
"bands_are_half_open": "Each band covers [min_amount, max_amount) — max is exclusive.",
"must_be_contiguous": "A band's max_amount must equal the next band's min_amount. Not max-1.",
"first_band_starts_at_zero": true,
"last_band_is_open_ended": "The last band must have max_amount: null.",
"example": {
"country_code": "RO",
"parcel_tier": "small",
"currency": "RON",
"bands": [
{
"min_amount": 0,
"max_amount": 50000,
"absorbs": false
},
{
"min_amount": 50000,
"max_amount": null,
"absorbs": true
}
]
}
},
"selling_countries": [
{
"country_id": 70,
"code": "ES",
"name": "España",
"currency": "EUR"
}
]
}