Can an AI Support Agent Void a Label, Change an Address or File a Package-Protection Claim? 12 Shopify Shipping Protection and Fulfillment Apps (2026)
Of the 12 shipping protection and fulfillment apps we checked on 28 September 2026, seven publish an API an AI support agent can call with a static key, and only two, Order Protection and EasyPost, document filing a claim through it. Route, the best-known name in package protection, has no claim endpoint in its merchant API. On the fulfillment side the useful writes are narrower than they sound: ShipBob documents an address-update endpoint for shipments, and ShipStation, Shippo and EasyPost can void or refund an unused label. Narvar's 2026 holiday survey found that 23% of US shoppers had been told a package was delivered when it never arrived, and that's the ticket most of these apps exist to answer. We also built an Order Protection agent and ran it on test tickets; the most useful thing it did was refuse to talk about an order that wasn't the customer's.
Key takeaways
- Of 12 Shopify shipping protection and fulfillment apps checked on 28 September 2026, 7 publish an API an AI agent can call with a static key, and only Order Protection and EasyPost document filing a claim.
- Order Protection files a claim with POST /v1/claims/{sourceOrderId} and reads an order's claims with GET /v1/orders/{sourceOrderId}/claims, using a personal access token scoped to claim:create or claim:read.
- Seel's API lists claims by order_id with two required headers, X-Seel-API-Key and X-Seel-API-Version, but Seel issues keys by email and documents no claim-creation endpoint.
- ShipBob's API changes a shipment's address with PUT /shipment/{shipmentId}:updateAddress, using a personal access token that doesn't expire, within a limit of 150 requests a minute.
- In our test, the agent wouldn't discuss order #1096 because its email didn't match the requester's, and it gave a holding reply when Order Protection's API returned 401 to our placeholder token; on Macha, the Macha team builds and tests these custom tools for you, at about $0.40 a ticket with a dedicated success manager included.
Which shipping protection and fulfillment apps can an AI agent call, and with what key?
The ratings come from each app's Shopify App Store listing on 28 September 2026. The API columns come from each vendor's API reference the same day. "Custom API tool" means Macha's team builds the call during onboarding; none of these apps has a built-in Macha connector.
| App (App Store rating, reviews) | API auth | Static key? | Support reads documented | Support writes documented | Help-desk apps the vendor documents | Route |
|---|---|---|---|---|---|---|
| Package protection | ||||||
| Route (4.0, 377) | Header named token | Yes | Read Shipment (needs tracking number and store order id) | None for claims | Zendesk app (view and file claims), Gorgias (claim status, deep link to filing) | Custom API tool, reads only |
| Order Protection (no Shopify listing found) | Authorization: Bearer, personal access token | Yes, scoped, optional expiry | Claims by order, order, fulfillments | Create claim (online and offline), order metadata | Zendesk, Gorgias, Kustomer, Richpanel | Custom API tool |
| Seel (4.9, 296) | X-Seel-API-Key plus X-Seel-API-Version | Yes, key by email from Seel | List claims by order, get claim, contracts | None for claims | Not verified | Custom API tool, reads only |
| Extend (listing not matched) | X-Extend-Access-Token from an OAuth client-credentials exchange | No | Claim photos, service orders | Logistics decisions on approved claims | Not verified | Not feasible today |
| Navidium (4.8, 392) | None found | none | none | none | none found | Not feasible today |
| ShipInsure (4.8, 67) | None found | none | none | none | Not verified | Not feasible today |
| Corso (listing not found on 28 Sept) | None found | none | none | none | Gorgias (per Corso's help center) | Not feasible today |
| Fulfillment and labels | ||||||
| ShipStation (4.2, 707) | v2 API-Key; v1 Basic key:secret | Yes, Standard plan and up | Shipments and labels | Void a label; hold an order (v1) | Not verified | Custom API tool |
| ShipBob (4.3, 286) | Authorization: Bearer, personal access token | Yes, never expires | Orders by reference id, shipments, timeline | Update shipment address, cancel order or shipment, hold and release | Not verified | Custom API tool |
| Shippo (4.2, 318) | Authorization: ShippoToken <key> | Yes | Tracking, transactions | Refund an unused label | Not verified | Custom API tool |
| EasyPost (no Shopify listing found) | HTTP Basic, key as username | Yes | Trackers, shipments, claims | Refund a label; create an insurance claim | Not verified | Custom API tool |
| ShipMonk (4.4, 102) | API key issued on request | Unverified | Unverified | Unverified | Not verified | Needs ShipMonk's docs first |
| Baseline: Shopify | Macha's built-in Shopify connector | Built in | Orders, fulfillment status, customer | Create Refund, Cancel Order (confirmation step) | n/a | Built-in |
Two things about the table matter more than the ticks. First, "static key" and "useful to support" aren't the same. Route and Seel both take a static key, but everything their APIs write is order and shipment registration, the plumbing that attaches protection to a sale. Neither writes anything a support ticket needs. Second, Navidium has 392 App Store reviews, more than Route, and we found no API for it. Reviews in this category rate the checkout widget and say nothing about the back office.
What do customers ask about shipping protection and fulfillment?
The tickets fall into five shapes, and each needs a different app:
- "It says delivered but it isn't here." The protection app owns the answer if the customer bought protection; the carrier and the store own it if they didn't. Narvar's survey of 1,348 US consumers put this at 23% for the past year, and 37% had a late package.
- "It arrived broken." A damage claim, usually with photos. Protection apps want a photo per damaged item.
- "Where's my claim?" A status question about a claim already filed. This is the one an agent can answer end to end, if the app's API reads claims.
- "I typed the wrong address." Time-critical. Before a label exists, the fix lives in the 3PL or the shipping app. After, it's a carrier intercept or a reship.
- "Cancel it before it ships." Shopify's Cancel Order handles the order; the 3PL or label app has to stop the parcel.
Order tracking questions ("where is it?") are the neighbor category, covered in which order-tracking apps an AI agent can use.
Which jobs can an AI agent finish end to end?
Five jobs have a documented API path with a static key. Reading a claim's status is a Read tool; the other four are Write tools, so the rule for when to call them belongs in the agent's instructions.
Read a claim's status. Order Protection's GET /v1/orders/{sourceOrderId}/claims returns every claim on an order with its type (for example DAMAGED), state (for example APPROVED), the resolution the customer asked for (for example RESHIP) and the claim's messages. Seel's GET /v1/ecommerce/claims?order_id= returns status as pending, accepted, rejected, closed or resolved, with a reject reason. EasyPost's claims carry seven statuses from submitted to needs_action. Of the 12 apps, these three are the only ones where "has my claim been approved?" can be answered from an API call with a static key.
Seel's key arrives by email: its overview says "You can contact [email protected] to get your API key." That's a support ticket of its own before anyone builds a tool.
File a protection claim. Order Protection documents POST /v1/claims/{sourceOrderId}. The required fields are the customer's email, sales channel, claim category (SHIPPING or WARRANTY), a resolution and a list of fulfillment issues, each naming the fulfillment, the item, the issue type, a quantity, details and image URLs. That's a lot of structured data for an agent to assemble from an email, and the images have to be reachable URLs, so in practice we'd let the agent gather the facts and a person, or Order Protection's own portal, submit. Its personal access tokens are scoped: claim:read for status, claim:create to file, claim:update to change, so a read-only agent can hold a token that can't file anything.
EasyPost's POST /v2/claims files an insurance claim for a shipment insured through EasyPost, with the evidence, invoice and supporting documents sent as base64 strings. EasyPost Insurance is not the same product as the checkout protection apps above, and USPS indemnity claims on EasyPost labels go through a separate USPS Claims API.
Change a shipment's address. ShipBob documents PUT /2026-07/shipment/{shipmentId}:updateAddress with the new street, city, state, zip and country, plus an override_verification flag. Its orders endpoint finds a ShipBob order from the store's own order id through the ReferenceIds filter, so the chain is Shopify order, ShipBob order, shipment id, address update. The whole API allows 150 requests a minute per user and application, on a sliding window, and answers a 429 with an x-retry-after header when you go over; three calls per ticket won't come near it.
Void or refund an unused label. ShipStation's v2 PUT /v2/labels/:label_id/void voids a label, and its docs warn that voided labels "cannot be un-voided." Shippo refunds an unused label when you POST the label's transaction id to /refunds. EasyPost's POST /shipments/:id/refund works on USPS labels within 30 days that USPS hasn't scanned, with at least 15 days before the money returns to the EasyPost balance, and on UPS and FedEx labels within 90 days. A void is a support tool only when it sits next to a reship or an address fix; on its own it just cancels postage.
Hold or cancel. ShipBob documents Cancel Order (the order "must be in a cancellable state") and bulk hold and release. ShipStation v1 has Hold Order Until. Shopify's Cancel Order, a built-in Macha tool, cancels the order in the store, but it doesn't stop a 3PL that already has it, so a cancellation ticket for a ShipBob store needs both calls.
Which apps only allow reads, or no API at all?
Route and Seel read but don't write anything a ticket needs. Route's merchant API has eight endpoints, one of them a GET, and none creates or reads a claim; the details are on our Route page. Seel reads claims, as above, and leaves filing to its Resolution Center, where the shopper has 7 days to answer a request for more information before Seel closes the case.
Extend documents an API, but its access token comes from an OAuth client-credentials exchange: an admin creates an API integration in Extend's Merchant Portal, gets a client id and secret, and exchanges them at /auth/oauth/token. A custom tool that sends one fixed token can't run that exchange, so we'd call Extend not feasible today with a static key.
Navidium, ShipInsure and Corso had no public API reference we could find on 28 September. That's what we found, not proof there's no API; a merchant on one of them should ask the vendor before assuming the agent can reach it.
Which apps put the API behind a plan or an approval?
- ShipStation: the App Store listing puts "Shipping API" on the Standard plan, $29.99 a month; Starter at $14.99 doesn't list it.
- Seel: keys come by email from [email protected], not from a dashboard.
- Order Protection: "You must be an OrderProtection customer to gain access to the API," and tokens are created in its dashboard.
- Extend: only an account admin or integrator role can open the Integrations tab that issues credentials.
- ShipMonk: we couldn't reach a public API reference; access appears to be by request.
There's an incentive under the protection apps' choices. A protection app is an insurance-shaped business: it collects a fee on every protected order and pays out on claims, and some share revenue with the merchant (Order Protection's docs describe monthly payouts with a revenue share). The claim flow is where the loss ratio is decided, so it's the part a vendor most wants to run itself, with its own photo checks and fraud review. That's why Route and Seel keep filing inside their own portals, and why Order Protection, the one that does expose filing, also runs its own claim-review AI. So the most an outside agent should expect is to read a claim's status; the decision stays with the vendor.
What do the help desks' own integrations already do?
On several help desks the vendor's own app already covers the claim, and it's worth knowing before building anything:
- Route on Zendesk: a human agent searches by email and order number, sees claim status and denial reasons, and files a claim from the sidebar. On Gorgias, Route shows status and deep-links to its filing page.
- Order Protection on Zendesk and Gorgias: the sidebar shows the order, items, claim status and type, with a "File a Claim" or "View Submitted Claim" button and a link to send the customer. On Gorgias it also creates a macro. Neither integration creates tickets. Kustomer gets a synced claim object and Richpanel opens a ticket per claim.
- Order Protection's own AI agent: its claim automation reviews eligible claims against your SOPs and proposes approve, deny, message the customer, wait or escalate. Every store starts in suggestion mode, and Order Protection, not the merchant, decides when a claim type graduates to automatic execution.
- Gorgias AI Agent: its Shopify actions edit a placed order's shipping address in Shopify. That fixes the store's record, not a 3PL's copy or a printed label. Our matrix of help desk AI agents that take actions compares the rest.
- ShipBob and Shippo now run MCP servers for AI clients, and Shippo's uses per-user OAuth. They're built for a person's AI assistant, not for a support agent answering a queue.
If you run Zendesk with Route or Order Protection, the claim itself is already one click for a human agent. What's left for an AI agent is the part before and after: working out which order, whether it shipped, whether a claim exists, and what to tell the customer.
Our test: an Order Protection claim agent on two sandbox tickets
On 28 September 2026 we built an agent called "T4-132-Protection claim desk (Order Protection)" in our Macha Demo org, left it inactive with no trigger, and gave it the built-in Shopify Get Order and Search Orders tools, four Zendesk tools, and one custom tool: "T4-132 Order Protection: Get claims by order," a Read tool calling GET https://api.production.orderprotection.com/v1/orders/{{source_order_id}}/claims with a Bearer token. The token is a placeholder, so Order Protection's live API answered the tool's Run Test with HTTP 401 and {"message":"Unauthorized","statusCode":401}. That's the expected result with a placeholder: the request reached Order Protection's API, which refused it at the auth check. A 401 only proves the request reached that check, so test with a real token before relying on it.
These were the agent's instructions, verbatim:
You handle tickets about lost, stolen, damaged or "delivered but not here" parcels. Our shipping protection app is Order Protection. 1. Find the order with Shopify Get Order, using the order number the customer gives. If they give none, search orders by the requester's email. Only discuss an order whose email matches the requester's email; if it doesn't match, ask the customer to confirm the order number and stop. 2. Check the order's fulfillment status before anything else. If the order is unfulfilled, it hasn't shipped, so it can't be lost or delivered: say so, give the order status, and don't mention a claim. 3. If the order has shipped, look up existing claims with "T4-132 Order Protection: Get claims by order", passing the Shopify order ID (the long numeric id), not the #number. If a claim exists, tell the customer its type and state in plain words. If none exists, send them the claim link from the order confirmation email and tell them they'll need photos for a damaged item. 4. You never file, approve, deny or change a claim, and you never promise a refund or a reshipment. Order Protection decides claims. 5. If the Order Protection tool returns an error, don't tell the customer what went wrong inside our systems. Reply that a teammate is checking the claim and will follow up today, add an internal note with the order number, the Shopify fulfillment status, the tool name, the HTTP status and the error message, and tag the ticket protection_tool_error. 6. Tag every ticket you handle shipping_protection_ai. Never paste the customer's address or phone number into a note.
We ran it twice with Macha's agent Test feature, which creates a real ticket on our d3v-macha sandbox Zendesk and dispatches the agent the way a ticket-created trigger would. The requesters are made up and the Shopify store is our development store, where every order is paid and unfulfilled. One artifact of the Test feature: the customer's message shows as an internal comment and the ticket says "Via API."
Ticket #1152, "Tracking says delivered, nothing here (#1096)," asked us to file a protection claim or reship. The agent read the ticket, called Get Order for #1096, saw that the order's email wasn't the requester's, and stopped: it replied asking for the right order number or the email used on the order, and tagged the ticket. It never reached the fulfillment check or the Order Protection tool. About ten seconds passed from ticket to reply.
The stop was right, and the wording still gave a little away. "I found order #1096, but the email on that order doesn't match" confirms to a stranger that order #1096 exists. It's a small leak, but a protection ticket is exactly where someone might fish for another customer's order. We'd change step 1 to "don't say whether the order exists; ask for the order number and the email used at checkout."
Ticket #1153, "Status of my damaged-item claim?", gave no order number. The agent searched Shopify by the requester's email, found nothing, tagged the ticket and asked for the order number. Again no claim lookup, correctly: without an order it had no id to send.
Neither ticket exercised the claim tool, because our store has no shipped order under a made-up email. So we ran one turn in the agent's Try it chat, as a teammate, with a made-up Shopify order id, asking it to check the claim with the Order Protection tool only. It called the tool once, got the 401, and followed step 5 to the letter: a holding reply saying a teammate is checking the claim and will follow up today, with nothing about the error. The Try it chat can reach every tool in the org, not only the agent's, which is why the prompt limited it to the one tool.
We haven't made a successful call to Order Protection or any other app on this page; we hold no real keys. Everything about what a successful response contains comes from the vendors' docs.
What should stay with a person?
- Claim decisions. Approving, denying or reshipping on a protection claim is the vendor's call, or yours if you self-insure. Order Protection runs its own AI for this, gated by its own rollout.
- Filing, for now. Even where the API allows it (Order Protection), the claim needs item-level ids, photos as URLs and a resolution. Let the agent collect them into a note.
- Fraud signals. Repeat "delivered, not received" claims from one address, or a requester whose email doesn't match the order.
- Anything after the label. Once a label is printed, an address change is a carrier intercept or a void plus a new label, and a voided label can't be un-voided.
- Carrier claims. USPS lost-package claims open 15 days after mailing and close at 60, per our peak-season WISMO page; that paperwork belongs to a person.
Where Macha fits
Macha's built-in Shopify connector does the first half of every ticket on this page: Get Order and Search Orders find the order and say whether it shipped, and Cancel Order and Create Refund are there, behind a confirmation step, when the store itself should act. The apps connect through a custom API tool that Macha's team sets up during onboarding, with each app's own auth: a Bearer token for Order Protection and ShipBob, a token header for Route, two fixed headers for Seel, ShippoToken for Shippo, Basic auth for EasyPost. We'd start every build with read tools, test each against a real order with the tool's Run Test button, and add a Write tool (a ShipBob address change, a label void) only with a rule in the instructions for exactly when it runs. The tool editor labels Write tools "requires confirmation," but in a 28 September chat test a custom Write tool ran without a confirmation card, so the guard belongs in the instructions.
On Macha that build isn't your team's job. Macha is the done-for-you option: you connect your help desk and Shopify, about 15 minutes, and hand over the protection or 3PL app's API key. The Macha team then analyzes about a month of your past tickets, builds the custom tools and the agent, tests it on a sample of those tickets, and runs it in safe mode, with drafts as internal notes in your help desk, until the drafts are right. That's included on the trial and every plan.
Macha starts at $299/month for 750 tickets, charged per ticket, so a "delivered but not here" ticket that takes a Shopify lookup, a claim check and three replies is one charge; the full ladder is $299 a month for 750 tickets, $599 for 1,500, $1,199 for 3,000, $1,999 for 5,000, $2,999 for 7,500 and $3,999 for 10,000, with custom pricing above that. That's about $0.40 a ticket, and it includes the setup and a dedicated success manager who handles your changes after go-live, such as a new claim rule, a second app or an instruction edit. It fits teams running Zendesk, Freshdesk, Gorgias, Front, HubSpot or Intercom who sell protection or ship through a 3PL and want the agent to settle "which order, did it ship, is there a claim" before a person touches it. You can try it on $50 of free usage (about 125 tickets), no credit card, no time limit.
The full Shopify app map by category is on which Shopify apps an AI support agent can work with. For single apps, see Route, ShipStation and AfterShip.
FAQ
Can an AI support agent file a Route claim?
Not through Route's API. None of the eight endpoints in Route's v2 merchant reference creates or reads a claim. Route's Zendesk app lets a human agent file one from the sidebar, and its Gorgias integration deep-links to Route's filing page, so an AI agent's job is to gather the order and tracking facts and hand off.
Which shipping protection app lets an AI agent file a claim with an API key?
Order Protection, as of 28 September 2026. It documents POST /v1/claims/{sourceOrderId} with a Bearer personal access token carrying the claim:create scope. EasyPost also files claims by API, but only for shipments insured through EasyPost Insurance, not for a checkout protection app.
Can an AI agent change a shipping address in ShipBob?
ShipBob's API documents PUT /shipment/{shipmentId}:updateAddress, authenticated with a personal access token that doesn't expire. The agent finds the ShipBob order from the Shopify order id with the ReferenceIds filter, then updates the shipment's address.
Does the ShipStation API need a paid plan?
Yes. ShipStation's Shopify App Store listing puts "Shipping API" on the Standard plan at $29.99 a month, not on Starter at $14.99. The v2 API authenticates with an API-Key header and documents voiding a label, which can't be undone.
Is shipping protection the same as shipping insurance?
Not quite. Checkout apps like Route, Order Protection and Seel sell protection to the shopper and handle claims in their own portals. Shipping insurance, such as EasyPost Insurance, covers a shipment the merchant insures when buying the label, and the merchant files the claim.
What should an AI agent do with a "delivered but not received" ticket?
Check the order in Shopify first: confirm it belongs to the requester and has shipped. Then read any existing claim from the protection app, if its API allows it, and tell the customer the claim's status or where to file. Leave the decision to reship or refund to the protection app or a person.
How we researched this
- App Store figures come from each app's Shopify App Store listing, read from the page's structured data on 28 September 2026: Route 4.0 from 377 reviews, Seel Worry-Free Purchase 4.9 from 296, Navidium 4.8 from 392, ShipInsure 4.8 from 67, ShipStation 4.2 from 707, ShipBob 4.3 from 286, Shippo 4.2 from 318, ShipMonk 4.4 from 102. We found no Shopify listing for Order Protection or EasyPost, couldn't find Corso's on 28 September, and couldn't match Extend's protection app to a listing.
- API facts come from each vendor's reference, fetched 28 September 2026: Order Protection's API introduction, Get Claims By Order, Create Online Claim, personal access tokens and its Zendesk and Gorgias pages; Seel's API overview, List claims and claims guide; Extend's authentication; ShipBob's authentication, Update Shipment Address, Get Orders, Cancel Order and rate limit; Shippo's authentication and refunding labels; EasyPost's authentication, claims and shipping refund. ShipStation and Route facts are from the sources on our ShipStation and Route pages, checked the same day. Corso's integrations come from its help center.
- "Seven of 12" counts apps with a public API reference and a key that doesn't need an exchange: Route, Order Protection, Seel, ShipStation, ShipBob, Shippo and EasyPost. The other five are Extend (OAuth exchange), Navidium, ShipInsure and Corso (no reference found) and ShipMonk (unverified). "Only two file claims" counts documented claim-creation endpoints with a static key: Order Protection and EasyPost.
- Narvar figures are from its 2026 holiday shopping survey of 1,348 US consumers and 100 retail decision-makers, published 24 August 2026. Narvar sells post-purchase software, so treat it as a vendor survey.
- Live test: one custom tool Run Test with a placeholder token (HTTP 401 from Order Protection's live API), two Test runs on our d3v-macha sandbox Zendesk (#1152 and #1153) with made-up requesters and our Shopify development store, and one Try it chat turn with a made-up order id, all on 28 September 2026. No app returned real data. All customer names, emails and orders in the examples are synthetic.
- Macha facts come from our Shopify integration page, custom tools docs and pricing; the Write-tool behavior is what we observed in a 28 September chat test.
Resolve tickets automatically with AI agents
Macha's AI agents work on top of the help desk you already use — no code.

