Meet your store
where it already is.
Connect your store through Shopify (app in development), WooCommerce, Medusa, our Node.js and PHP libraries, or the REST API. Use the sandbox to connect your first synthetic order.
Choose your path.
One API, whichever way your store is built. The WordPress plugins need no code, the Medusa plugin takes a little setup, and a Shopify app is in development. The libraries and the REST API are for a store you build yourself, and the integration guide takes them step by step. Every path that uses a key keeps it on your server; never expose it to a browser.
Shopify app
A Shopify app is in development, for development stores only. Tell your Post Coverage contact that you sell on Shopify, and which Shopify plan you are on.
WooCommerce plugin
Install it and add your key. It puts the opt-in module above Place Order in the classic and block checkouts, records each paid order and keeps delivery events in step.
Medusa plugin
Offers protection at checkout, records each order, sends delivery events with their tracking numbers and emails the customer their claim link. Ask your Post Coverage contact for the package.
Claim lookup plugin
Lets customers check a claim on your own pages with a shortcode or a block. Works beside any of the other paths.
Node.js library
One file, post-coverage.mjs, with no dependencies and with TypeScript declarations. The guide walks through every call.
PHP library
One file, post-coverage.php. It needs only curl and json, no Composer, and is namespaced so it sits safely beside WordPress.
REST API
HTTPS and JSON from your server, described in openapi.json. The guide shows each raw request next to the library code.
Building your own checkout?
The integration guide covers the five moments your server talks to Post Coverage, from the quote at checkout to a reissued claim link, in Node.js, PHP and raw HTTP, with the checkout rules every integration must follow. Its code is taken from examples that are run on every change.
Installing the Shopify app.
The Post Coverage app for Shopify is not in the Shopify App Store yet: ask your Post Coverage contact for the install link. While it is in the sandbox, the checkout offer runs on Shopify development stores only, and needs a store on the Shopify Plus plan. Protection always starts off: the shopper chooses it.
There are two ways to start. Both are quick.
Start on this website
- Sign up, set up your business, and open Settings, then Integration, in your dashboard.
- Enter your store’s .myshopify.com address and press Get my install link.
- Press Install the Post Coverage app and approve it in Shopify.
- When the app opens in your Shopify admin, check that its request code matches the one on your dashboard, then link your business with one click.
Start in Shopify
- Install the app with its install link.
- In the app, press Set up Post Coverage. Your store’s details are filled in from Shopify: check them, make three short choices, and create your account. The store is connected straight away.
- Check your email for how to sign in.
- Sign in at postcoverage.com with that email address to open your dashboard.
Already have an account? In the app, choose I already have an account.
Once connected, Post Coverage adds its protection prices to your store, which takes a few minutes. Then, in the checkout editor, turn on the Post Coverage block, and exclude Package protection from your discounts.
Your dashboard’s Integration settings show whether the store is linked. Claims are settled by the Post Coverage team. The app sends no customer names, email addresses, phone numbers or postal addresses to Post Coverage.
Two plugins for your own WordPress.
Install either from Plugins, Add New, Upload Plugin. Both need PHP 8.0 and WordPress 6.4 or later, call Post Coverage only from your server, and ship with their readable source and a translation template.
Post Coverage for WooCommerce
Adds an opt-in protection module directly above Place Order, in the classic and block checkouts, at the fee this API quotes. Records each paid USD order placed through your checkout and keeps delivery events in step. Needs WooCommerce 8.0 or later.
It offers protection at checkout only, switched off until the customer turns it on, charges the fee this API quotes for your server-computed cart, and records the order from PHP with your key server-side. Tested in a local store with HPOS on; behavior with a real payment gateway is not yet verified.
This API issues no live coverage, so do not charge real customers a protection fee until Post Coverage confirms an approved merchant agreement. Delivery events are accepted in the sandbox only for now; in live mode the plugin keeps them on its sync screen rather than faking them. Claim-link resets are sandbox-only too, and in live mode they are refused, not queued.
Post Coverage Claim Lookup
Lets a customer check a claim on any WordPress page with the [post_coverage_claim] shortcode or the Claim lookup block. Calls Post Coverage from your server and holds no API key. WooCommerce is not required.
A customer checks their claim with their order reference and the one-time access code you delivered to them. Your site proxies the public claim routes server-side, so no key and no browser call to Post Coverage are involved.
Points at the sandbox API by default. Replies and photos stay on Post Coverage, which every result links to.
Each readme’s External services section lists every request the plugin makes, when, and what it sends. Neither plugin sends customer names, email addresses, phone numbers, postal addresses, or payment details. The earlier single-file WooCommerce scaffold has been withdrawn: it stored the private claim code in plain order metadata. Delete it before installing these.
Both plugins, like the API, are covered by the Coverage and sandbox terms and the Privacy notice.
Your first test order.
Create your business workspace, generate a sandbox key in Integrations, and send a request from your server. This one records an order whose customer left protection off, so it needs no quote.
curl -X POST 'https://3feo7wip5b.execute-api.us-east-1.amazonaws.com/integrations/v1/orders' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_SERVER_SIDE_SANDBOX_KEY' \
-d '{
"externalId": "TEST-ORDER-1001",
"amountCents": 4800,
"currency": "USD",
"purchaseType": "recurring",
"customerOptedIn": false,
"coverageEligible": true,
"customerKey": "TEST-CUSTOMER-1001",
"deliveryStatus": "processing"
}'A protected order starts with a quote and carries the quote’s pricingVersion, and its answer holds a once-only access code. The integration guide shows both steps.
Sandbox only. Do not send real customer names, email addresses, phone numbers, street addresses, payment details, or product descriptions. Unknown fields are rejected.
Two small libraries for your server.
The dependency-free JavaScript client works with Node.js 22+ and includes TypeScript declarations. The PHP library is one file for PHP 8.0+ that needs only the curl and json extensions, with no Composer dependency, and is namespaced so it cannot collide with anything on a WordPress site. Both keep keys on the server, reject redirects and unsupported fields, and retry transient reads and idempotent order events with bounded backoff.
Order creation and private-link resets are never retried automatically: a lost response may contain a once-only credential. Reconcile the same external reference, then explicitly reset its private claim link if needed. The reset invalidates every previous code while preserving the case and conversation.
See both libraries at work in the integration guide
Every order belongs in the picture.
Send selected, declined, and ineligible synthetic orders. A declined order has customerOptedIn: false; an ineligible order also has coverageEligible: false. Neither receives a fee, policy, or claim code. Reports describe the orders received, so an integration sending only protected orders cannot establish whole-store opt-in. Recurring purchase events use purchaseType: recurring, a unique externalId per transaction, and an explicit customer opt-in flag.
The optional customerKey is an opaque test identifier scoped to your store. It supports an observed repeat-customer measure without a customer name or email. Delivery status is an initial snapshot; carrier tracking updates are not connected yet.
Small surface. Clear behavior.
| Method | Endpoint | Purpose |
|---|---|---|
| POST | /integrations/v1/quotes | Illustrative sandbox fee for USD order value, with a preview of the store credit the order would earn when your reward program is active |
| POST | /integrations/v1/orders | Create an idempotent sandbox order |
| GET | /integrations/v1/orders/detail | Read a linked order, policy, reward, and event history |
| POST | /integrations/v1/orders/events | Record delivery, cancellation, or refund events with retry protection |
| GET | /integrations/v1/rewards | Read your sandbox reward ledger |
| POST | /integrations/v1/rewards/redeem | Apply test credit to a repeat order for the same customer key |
| POST | /integrations/v1/rewards/reverse | Reverse a test application without extending expiry |
| POST | /integrations/v1/credits/check | Read the store credit a customer entered at checkout |
| POST | /integrations/v1/credits/redeem | Spend store credit on an order as it is placed |
| POST | /integrations/v1/credits/reverse | Give a redemption back when its order fails or is refunded |
| POST | /integrations/v1/orders/claim-access | Reset a private test link with an expected order version; previous links are revoked |
| POST | /public/claims/evidence/init | Start a private synthetic file upload with the order access code |
| POST | /public/claims/evidence/complete | Validate and pin the uploaded file; customer evidence resumes a waiting review |
| POST | /public/claims/evidence/download | Request a short-lived download for an authorized attachment |
| GET | /integrations/v1/claims | Read delivery issue status for your business |
| POST | /public/claims | Report an issue using a private order access code |
| POST | /public/claims/lookup | Check a report and its customer-visible conversation |
| POST | /public/claims/messages | Add a synthetic customer reply with the private code |
Retries that make sense.
externalId is unique within each merchant. Repeating the same order returns the existing record without duplicating it. Changing an existing amount, purchase type, coverage choice, eligibility, or customer key returns HTTP 409. On a concurrent first request, retry the same payload after a 409.
For protected orders, the private access code is returned once on creation. Store it securely with the confirmation; replayed requests do not recover it. Treat it as a credential.
Designed for your server.
Pass X-API-Key on all integration requests. Keys are tenant-scoped, hashed at rest, and rotatable. Poll claim status from your backend; outbound webhooks are not enabled in this release.
Amounts are integer cents, USD only, from $1 with no upper limit. Live rates come from the approved product model.
A familiar face in their inbox.
Preview branded test confirmations, private case notifications, and store-credit emails. The renderer produces HTML and plain text; it does not accept recipient addresses or send anything. Private case links belong in a transactional flow with tracking disabled.
Explore branded email previews
- JavaScript clientpost-coverage.mjs
- TypeScript declarationspost-coverage.d.mts
- PHP librarypost-coverage.php
- Test email rendererpost-coverage-emails.mjs
For schema details, see the OpenAPI specification. For the order of calls and the checkout rules, see the integration guide.