Developers
Connect Tare7 to the rest of your operation.
Let reporting tools and connected systems read the inventory and order data they need. Use webhooks to react when an order changes, stock arrives, or a shipment leaves.

Start safely
Read-only by design today.
Send Tare7 data to reports and connected tools without letting an integration change the source.
Keep each business separate
Every key belongs to one Tare7 workspace.
Scopes narrow what each integration can read, and a key can be revoked without disrupting the workspace.
React when work moves
Signed webhooks carry the event.
Send order, receipt, and shipment changes to the system that needs to act next.
Authentication
Every API request needs a bearer token. Generate a key at Settings → Integrations → Developer API (owners + admins only). Keys start with t7_ and are shown once at creation time — store them like a password.
curl -H "Authorization: Bearer $TARE7_KEY" \ https://tare7.com/api/v1/on-hand?location_id=loc_...
Keys are org-scoped. Every request is checked against the configured scopes for that key — a key with items.read alone cannot list purchase orders. Revoke a key at any time from the same page.
Endpoints
| Method | Path | Scope | Summary |
|---|---|---|---|
| GET | /api/v1/items | items.read | List items with paging + filter. |
| GET | /api/v1/on-hand | items.read | Current on-hand per item + location. |
| GET | /api/v1/purchase-orders | po.read | List POs by status + date range. |
| GET | /api/v1/sales-orders | so.read | List SOs by status + date range. |
| GET | /api/v1/receipts | po.read | List posted receipts + line detail. |
All responses are JSON. Errors follow { "error": string, "detail": string? } with the appropriate HTTP status.
Pagination
List endpoints accept limit (default 50, max 200) and offset. A limit above 200 is clamped rather than rejected.
Rate limits
Each API key may make 60 requests per minute. The window is a fixed clock minute, not a rolling one — the counter resets at the top of each minute, so a burst spanning a minute boundary can send up to 60 on each side of it.
Every response to /api/v1 carries:
- X-RateLimit-Limit — requests allowed per minute (60).
- X-RateLimit-Remaining — requests left in the current minute.
- X-RateLimit-Reset — unix seconds at which the current window resets.
Exceeding the limit returns 429 Too Many Requests with a Retry-After header in whole seconds and the usual error body:
HTTP/1.1 429 Too Many Requests
Retry-After: 37
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1799999940
{
"error": "Rate limit exceeded",
"detail": "Limit is 60 requests per minute per API key. Retry in 37s."
}Limits are counted per key, not per org — issue separate keys for separate integrations so one does not starve another. Need a higher ceiling? Email support@tare7.com.
Webhooks
Register a delivery URL at Settings → Integrations → Developer API. Choose which events fire to that URL. Every request:
- POST with a JSON body describing the event.
- Signed with your endpoint's shared secret using HMAC-SHA256. Signature is in the X-Tare7-Signature header.
- Retried on non-2xx responses with exponential backoff, up to 3 attempts.
- SSRF-guarded — private-network URLs and non-HTTPS endpoints are rejected before delivery.
| Event | When it fires |
|---|---|
| po.status_changed | Every time a purchase order moves between draft / approved / ordered / received / cancelled. |
| receipt.posted | When stock is received against a PO or via /scan/receive. |
| so.shipped | When a sales order ships (full or partial). Payload includes shipment id, tracking, and lines shipped. |
Verifying a signature in Node:
import crypto from "node:crypto";
function verify(body: string, header: string, secret: string) {
const [tsPart, sigPart] = header.split(",");
const timestamp = tsPart.replace("t=", "");
const signature = sigPart.replace("v1=", "");
const payload = `${timestamp}.${body}`;
const expected = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature, "hex"),
Buffer.from(expected, "hex"),
);
}On the roadmap
- Write endpoints — POST /items, /purchase-orders, /sales-orders, /receipts.
- Cursor pagination on high-cardinality lists.
- Additional events — quote.accepted, invoice.paid, cycle_count.completed.
- Formal OpenAPI spec + generated client SDKs.
Want a specific endpoint or event? Email support@tare7.com. We build API surface based on real customer asks, not speculation.
Plan requirements
Public API + webhooks are available on the Scale plan. Read-only access is included; write endpoints will be included when they ship.