ProfitGuard is here. AI repricing for Amazon, fully protected and on autopilot. Try it free
Early accessv1 · api_version 2026-11-01

Plug any warehouse into ProfitDesk.

The Prep API makes your software a prep center in ProfitDesk. Announcements reach you as signed webhooks, you report receipts and outbounds back, and every unit stays traceable from purchase to FBA shipment.

  • Signed webhooks
  • REST API
  • OpenAPI 3.1
  • Event replay
ProfitDesk → yousigned webhook
POST https://wms.example.com/webhooks/profitdesk
X-Webhook-Event-Type: inbound.announced
X-Webhook-Signature: sha256=9f2c41…

{
  "type": "inbound.announced",
  "connection_id": "pcn_812",
  "data": {
    "inbound": {
      "id": "inb_2000000123",
      "fulfillment": "FBA",
      "tracking_numbers": ["1Z999AA10123456784"],
      "lines": [{
        "id": "inl_99",
        "purchase_id": "pur_4711",
        "item": { "sku": "AB-123", "asin": "B0ABCDEFGH" },
        "quantity_expected": 6
      }]
    }
  }
}
You → ProfitDeskREST · 200 OK
POST /v1/prep/inbounds/inb_2000000123/receipts
Authorization: Bearer ppk_3f9a…

{
  "event_id": "rcpt-8812",
  "status": "received",
  "lines": [{ "line_id": "inl_99", "quantity_received": 6 }]
}

Two ways in

One API, built for two kinds of builders.

Set up in your ProfitDesk account
  1. 1Add your softwareSettings → Integrations → Prep centers → Add → “Own software (Webhook)”. Enter your HTTPS endpoint and pick the events you want.
  2. 2Store two credentialsA signing secret (whsec_…) and an API key (ppk_…), shown once. Rotate both anytime.
  3. 3Link a warehousePurchases in that warehouse are announced to your software from now on.
Key sees
This one connection
Rate limit
2 req/s, bursts of 10
Testing
“Send test” ping and a delivery log
Mix & match
Next to PrepBusiness or PrepTool, per warehouse

How it works

From purchase to FBA shipment,
in five events.

  1. 01ProfitDesk
    Goods are on their wayinbound.announcedA signed webhook with lines, SKU, ASIN and tracking. Answer 2xx, optionally with your own external_id.
  2. 02ProfitDesk
    Details followinbound.updatedNew tracking codes and the FNSKU once Amazon assigns it, so you can print labels.
  3. 03You
    You count the goodsPOST …/receiptsAbsolute counts per line, damaged units included. ProfitDesk updates the purchase.
  4. 04You
    You ship them outPOST /v1/prep/outboundsLines plus the FBA shipment id link your outbound to Amazon’s shipment.
  5. 05Amazon
    Amazon receivesFBA15XYZProfitDesk books the forwarded quantity from Amazon’s own data. Your outbound is the trace.
Stable identifiers

Every unit, traceable end to end.

Each object carries an id with a type prefix. The purchase id never changes, even when goods are re-announced or move warehouse.

  1. pur_4711PurchaseThe seller’s buy. The key to follow a unit, forever.
  2. inb_2000000123InboundOne announcement. A re-announcement gets a new one.
  3. inl_99Inbound lineOne purchase inside it. Use it in receipts and outbounds.
  4. out_55OutboundWhat you shipped, addressed by your own external_id.
  5. FBA15XYZFBA shipmentAmazon’s shipment id, linked from your outbound.

Use your own references too: every path that takes an id also accepts ext:<your id>.

Built for production

The boring parts
are already solved.

Signed webhooksHMAC-SHA256 over timestamp and raw body. Requests older than five minutes are rejected.
Retries for 72 hoursAfter 1, 5 and 15 minutes, 1, 3 and 6 hours, then every 12 hours.
Idempotency built inSame key, same request: the stored response is replayed. Keys are kept 30 days.
Out-of-order safeEvery receipt and outbound carries occurred_at. Older events come back as stale and change nothing.
Replay feedGET /v1/prep/events holds every event for 90 days. Poll it instead of webhooks if you prefer.
Ordered per inboundA cancellation never overtakes its announcement. Deduplicate by event id.
Deep links into your WMSA link template puts “open in your software” next to every announced purchase.
Rotation without downtimeAfter a secret rotation the old secret keeps signing for 24 hours.
Verify every request

HMAC-SHA256 in a dozen lines.

Sign the raw body with your whsec_ secret and the timestamp, compare in constant time, reject anything older than five minutes. During a secret rotation both signatures are sent for 24 hours.

import crypto from "node:crypto";

function verify(rawBody, headers, secret) {
  const ts = headers["x-webhook-timestamp"];
  const signature = headers["x-webhook-signature"];
  if (!ts || !signature || !/^\d+$/.test(ts)) return false;
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
  const expected = "sha256=" + crypto.createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
  return signature.split(",").some((sig) => {
    const a = Buffer.from(sig.trim()), b = Buffer.from(expected);
    return a.length === b.length && crypto.timingSafeEqual(a, b);
  });
}

Endpoints

Base URL https://api.profitpath.app · Bearer ppk_…

GET/v1/prep/connectionsThe key’s connection
GET/v1/prep/inboundsList inbounds
GET/v1/prep/inbounds/{id}One inbound, also by ext:
PUT/v1/prep/inbounds/{id}/external-idSet your reference
POST/v1/prep/inbounds/{id}/receiptsReport goods received
POST/v1/prep/outboundsReport an outbound
GET/v1/prep/outbounds/{id}One outbound
GET/v1/prep/itemsItems, one per SKU
GET/v1/prep/eventsReplay webhook events

Webhook events

Delivered at least once, in order per inbound.

connection.created · updated · removedA seller connects, changes details or leavesProviders
inbound.announcedGoods are on their way to youOn
inbound.updatedTracking, FNSKU, external id or lines changedOn
inbound.cancelledCancelled, moved or re-announcedOn
inbound.restoredA cancelled inbound is active againOn
inbound.receivedEcho of your own receiptOpt-in
outbound.recordedEcho of your own outboundOpt-in
ping“Send test” from ProfitDeskOwn software

FAQ

Questions from developers

If you run your own warehouse software for your own Amazon business, use the own-software connection in your ProfitDesk settings. If you build software that many prep centers or sellers use, register as a prep provider: one endpoint and one key cover every seller.

With your own software, use a test warehouse and a test purchase in your own account, and “Send test” for connectivity. As a prep provider, ask us for a test connection from a test seller account, and run the whole flow before your first real seller connects. Events can always be replayed.

Goods are announced as soon as the Amazon listing exists. Amazon assigns the FNSKU a little later, and it follows in inbound.updated.

ProfitDesk retries for up to 72 hours. After that you can catch up anytime with GET /v1/prep/events.

No. Outbounds are a trace. Forwarded quantities come from Amazon’s own shipment data, linked through the FBA shipment id you send.

Yes. Poll GET /v1/prep/events every minute from the last event id you processed, and deduplicate by id.

Building prep software
for many sellers?

Get listed in every ProfitDesk seller’s prep-center picker. One endpoint and one key cover all of them.

support@profitpath.com