Insurance & claims
Insure shipments by declared value and file claims with evidence when something goes wrong.
Insure a shipment when you create it (requestInsurance: true + declaredValue) and, if the package is lost, damaged, or stolen, file a claim with evidence directly through the API.
Prerequisites to claim
- The shipment must have insurance (requested at shipment creation).
- The label must not be voided. A refunded label is not claimable.
- No other open claim may exist for the same shipment.
How a shipment gets insured
Insurance is bought at label time, not separately. Create the shipment with requestInsurance: true and a declaredValue in MXN. Rates come back with the premium included: breakdown.insuranceCost and isInsured: true on each rate. When you buy an insured rate, the premium is part of the label charge and an ACTIVE policy is created. That is the policy you claim against. Voiding the label refunds the premium and voids the policy. With no insurance there is no policy, and the claim is rejected.
Endpoints
| Method | Path | Role and scope | Description |
|---|---|---|---|
POST |
/v1/insurance-claims |
OPERATOR+ · insurance_claims:write |
File a claim |
GET |
/v1/insurance-claims |
Any member | List claims |
GET |
/v1/insurance-claims/:id |
Any member | Claim detail |
PATCH |
/v1/insurance-claims/:id/status |
ADMIN+ · insurance_claims:write |
Update the status (e.g. withdraw a claim) |
File a claim
Body parameters
shipmentIdstring
The insured shipment with the incident.
stringreasonstring
lost | damaged | stolen.
stringdescriptionstring
What happened, in as much detail as possible.
stringclaimedAmountnumber
Claimed amount. It cannot exceed the insured declared value.
numberevidenceUrls?string[]
Photos of the damage and packaging, purchase invoice, police report if applicable.
string[]curl -X POST https://api.sendit.mx/v1/insurance-claims \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"shipmentId": "clxq1w2e3r4t5y6u7i8o9p0a",
"reason": "damaged",
"description": "Package arrived with visible damage to contents",
"claimedAmount": 1500.00,
"evidenceUrls": [
"https://cdn.mitienda.mx/evidence/photo1.jpg",
"https://cdn.mitienda.mx/evidence/photo2.jpg"
]
}'
The 201 response returns the claim in FILED status with its claim number:
{
"success": true,
"data": {
"id": "clm_a1b2c3d4e5f6g7h8",
"shipmentId": "clxq1w2e3r4t5y6u7i8o9p0a",
"status": "FILED",
"reason": "damaged",
"claimedAmount": "1500.00",
"claimNumber": "CLM-2026-000123",
"createdAt": "2026-07-18T10:00:00.000Z"
}
}
The better the initial evidence, the faster the resolution: photos of the damage and the outer packaging, plus proof of value.
The claim lifecycle
FILED → INVESTIGATING → EVIDENCE_REQUIRED
↓
APPROVED → PAID
PARTIALLY_APPROVED → PAID
DENIED
CANCELLED
| Status | Meaning |
|---|---|
FILED |
Received and forwarded to the insurer |
INVESTIGATING |
Under review |
EVIDENCE_REQUIRED |
Additional documentation needed — upload it and update the claim |
APPROVED |
Full amount approved |
PARTIALLY_APPROVED |
A lower amount was approved (approvedAmount) |
DENIED |
Rejected |
PAID |
Payout disbursed by the insurer |
CANCELLED |
Withdrawn by you |
DENIED, PAID, and CANCELLED are terminal.
Cross-state rules
| Code | Situation | How to resolve it |
|---|---|---|
409 CLAIM_PENDING_NO_REFUND_ALLOWED |
Trying to void the label with an open claim | Resolve or withdraw the claim first |
409 SHIPMENT_REFUNDED_NO_CLAIMS_ALLOWED |
Trying to claim on a voided label | The cost was already refunded; no insurance applies |
409 CLAIM_ALREADY_OPEN |
An open claim already exists for that shipment | Follow up on the existing one |