Skip to main content
A claim is what you file with us when a shipment goes wrong, either it never showed up (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

A few things worth knowing about the fields:
  • Amounts are always in the smallest unit of the currency, not decimals, so unit_price: 15000 and claimed_amount: 30000 above 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 as 150, not 15000. Check the ISO 4217 minor unit for whatever currency you’re sending before assuming ×100.
  • claimed_amount is independent of line_items. We don’t sum the line items for you, whatever you put in incidence.claimed_amount is the amount that gets claimed. Line items are there to document what was in the shipment, not to calculate the total.
  • destination.city, address, and customer_name are all required. customer_phone is optional, but if you send one it needs to be 6 to 20 characters.
  • carrier has 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 second POST for the same tracking_number gets a 409. A claim counts as closed (not open) when it’s:
  • REJECTED, for any reason, or
  • CANCELED with a status reason of CREATED_INCORRECTLY or SHIPMENT_NOT_CLAIMABLE_YET (see Status reasons below).
Any other status, including a CANCELED claim with a different reason, still counts as open.
Once a shipment’s tracking number has been used for a claim before, sending it again reuses the shipment record we already have on file. That means the origin and destination you send only actually get saved the first time a claim is filed for that tracking number. If you file a second claim later (say, the first one got resolved and now something else went wrong with the same parcel), the origin/destination in the response will reflect what was originally submitted, not whatever you sent this time around. If an address genuinely changed, that’s a case for support rather than the API.

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 at CREATED. 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

This returns everything about the claim: its status, the shipment, and the incidence (the claim reason and amount). Poll this if you want to watch a specific claim move through review.

Listing your claims

You can filter by 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.
Last modified on August 25, 2026