Jomo.cool

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.

  1. In your project's Shipping tab → Fulfillment integration, select EasyPost or Shippo, paste your API key, and fill in your return address.
  2. Click Sync orders. Jomo creates an order/shipment record in your provider account for every backer with a complete address.
  3. In your EasyPost or Shippo dashboard, review the orders and purchase labels.
  4. 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

EasyPost URL POST /api/fulfillment/easypost/{projectId}
Events tracker.created, tracker.updated
Signature X-Hmac-Signature-256 header — hmac-sha256-hex=<hex>
Shippo URL POST /api/fulfillment/shippo/{projectId}
Events transaction_created, track_updated
Signature X-Shippo-Signature header — hex HMAC-SHA256 of the raw body

Both 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.

Docs Jomo.cool