Shipping API
Jomo integrates natively with EasyPost and Shippo, and exposes a JSON API for custom fulfilment workflows.
Native EasyPost / Shippo integration
The recommended approach. Enter your API key and return address once in your project's Shipping tab — Jomo pushes orders to your provider dashboard automatically.
- In your project's Shipping tab → Fulfillment integration, select EasyPost or Shippo, paste your API key, and fill in your return address.
- Click Sync orders. Jomo creates an order/shipment record in your provider account for every backer with a complete address.
- In your EasyPost or Shippo dashboard, review the orders and purchase labels.
- Add a webhook in the provider dashboard pointing to the URL shown in Jomo. Tracking numbers and delivery status flow back automatically and each backer receives a dispatch email.
EasyPost: easypost.com · Shippo: goshippo.com
Webhook endpoints
POST /api/fulfillment/easypost/{projectId}tracker.created, tracker.updatedX-Hmac-Signature-256 header — hmac-sha256-hex=<hex>POST /api/fulfillment/shippo/{projectId}transaction_created, track_updatedX-Shippo-Signature header — hex HMAC-SHA256
of the raw bodyBoth providers sign outbound requests with HMAC-SHA256. When you create the webhook in their dashboard you set a secret of your choice; paste the same secret into Jomo's Shipping page and all incoming requests will be verified. No authentication header is needed from your side.
The endpoints below are for fully custom integrations. If you're using EasyPost or Shippo natively you don't need them.
Custom API — authentication
Each project has its own API key, generated from the Shipping tab. Include it as a Bearer token on every request. A key can only access the project it was generated for.
Authorization: Bearer <your-project-api-key>GET/api/shipping/orders
Returns collected shipping addresses. Only addresses where the backer completed the address form are included.
Query parameters
project Required. Your project ID (visible in your dashboard URL).status Optional. Pass pending to exclude addresses
that already have a shipped or delivered record.Example
curl 'https://jomo.cool/api/shipping/orders?project=PROJECT_ID&status=pending' \
-H 'Authorization: Bearer YOUR_KEY' Response
{
"total": 1,
"orders": [
{
"orderId": "abc123",
"pledgeId": "xyz789",
"backerEmail": "backer@example.com",
"tierName": "Standard Edition",
"orderDate": "2026-05-25T10:00:00.000Z",
"shipTo": {
"name": "Alex Smith",
"line1": "123 Main St",
"line2": null,
"city": "Portland",
"state": "OR",
"postalCode": "97201",
"country": "US"
}
}
]
}POST/api/shipping/tracking
Update tracking info for a single order. On the first call with status: "shipped", the backer
automatically receives a dispatch notification email. The endpoint is idempotent.
Request body (JSON)
orderId The orderId from the orders response.trackingNumber Carrier tracking number.carrier e.g. UPS, USPS, FedEx.status "shipped" or "delivered".Example
curl -X POST 'https://jomo.cool/api/shipping/tracking' \
-H 'Authorization: Bearer YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"orderId":"abc123","trackingNumber":"1Z999AA10123456784","carrier":"UPS","status":"shipped"}'Error codes
400 Missing or invalid parameter.401 Invalid or missing API key.403 No API key has been generated for this project yet.404 Project or order not found.ShipStation
ShipStation's "Custom Store" integration requires orders in a proprietary XML format that Jomo does not produce. ShipStation is not supported natively. If you need it specifically, contact the Jomo team, or use Zapier / Make.com to bridge the two.