LOST) or it arrived broken (DAMAGED). You send us the shipment info and what you’re claiming, and Opereit takes it from there: preparing documentation and running the claim through the carrier’s process.
This page walks through the practical stuff: what you need before you call the API, what the fields actually mean, and a few things that’ll trip you up if you don’t know about them. For the full field-by-field breakdown, see the API Reference.
Before you start
You’ll need:- An API key (see Authentication if you don’t have one yet).
- The shipment’s tracking number and carrier.
- The destination address the parcel was headed to.
- What’s being claimed: item(s), quantity, price, and the total amount you’re claiming.
Creating a claim
- Amounts are always in the smallest unit of the currency, not decimals, so
unit_price: 15000andclaimed_amount: 30000above mean €150.00 and €300.00 (EUR has 2 decimal places, so the minor unit is 1/100). That conversion isn’t the same for every currency, e.g. JPY has no decimal places at all, so 150 JPY is sent as150, not15000. Check the ISO 4217 minor unit for whatever currency you’re sending before assuming ×100. claimed_amountis independent ofline_items. We don’t sum the line items for you, whatever you put inincidence.claimed_amountis the amount that gets claimed. Line items are there to document what was in the shipment, not to calculate the total.destination.city,address, andcustomer_nameare all required.customer_phoneis optional, but if you send one it needs to be 6 to 20 characters.carrierhas to be one of the values below. Anything else gets rejected with a 400 before we even touch the shipment.
Supported carriers
If your carrier isn’t on this list, get in touch, we’re adding more regularly.
The provider field
provider is optional and only relevant if you booked the shipment through a multi-carrier platform or aggregator rather than directly with the carrier. Most integrations can just leave it out. Known values:
Filing more than one claim for the same tracking number
You can only have one open claim per tracking number at a time, if one’s already open, a secondPOST for the same tracking_number gets a 409.
A claim counts as closed (not open) when it’s:
REJECTED, for any reason, orCANCELEDwith a status reason ofCREATED_INCORRECTLYorSHIPMENT_NOT_CLAIMABLE_YET(see Status reasons below).
CANCELED claim with a different reason, still counts as open.
DAMAGED vs LOST
There isn’t much nuance here.LOST means the parcel never arrived. DAMAGED means it did arrive, but something inside was broken, missing, or otherwise not right. Use incidence.description to say what actually happened, it helps a lot when the claim gets reviewed and when we’re building the paperwork for the carrier.
What happens after you create a claim
Every claim starts atCREATED. From there it moves through review with the carrier, and eventually lands somewhere final. Here’s the full list:
Status reasons
PENDING_ACTION, CANCELED, and REJECTED also come with a status_reason, extra detail on specifically why the claim landed there. Every other status leaves status_reason as null.
PENDING_ACTION
Right now, whatever the reason, the only way to act on a
PENDING_ACTION claim (including the three CUSTOMER_ACTION_REQUIRED_* ones above) is to reach out to Opereit support. We’re working on letting you resolve these directly through self-service actions, but that’s not available yet.
CANCELED
Of these,
CREATED_INCORRECTLY and SHIPMENT_NOT_CLAIMABLE_YET are the two that count as closed, meaning they don’t block a new claim on the same tracking number. See Filing more than one claim for the same tracking number. The rest still count as open.
REJECTED
Any
REJECTED reason counts as closed.
Checking on a claim
Listing your claims
status, carrierId, trackingNumber, and a fromDate/toDate range on the claim date. Results are paginated, if pagination.hasMore is true, pass pagination.cursor back as the cursor query param to get the next page.
Handling errors
Every error response looks like this:statusReasonCode is the one to branch your code on, it won’t change wording on you the way error might.
One thing to watch for on
INVALID_REQUEST_BODY: details.fieldErrors is keyed by shipment or incidence, not by the specific nested field. So if both your carrier and your line_items are wrong, they’ll both show up as messages under the single "shipment" key rather than under "shipment.carrier" and "shipment.line_items" separately. Read the message text, not just the key.