One API for the whole shop — agents welcome.
Orders, quotes, customers, invoices, payments, production, and pricing over REST. Signed webhooks when things happen. An MCP server so your AI agent can work the shop directly.
Shop-scoped API keys, OpenAPI 3.1 spec, durable rate limits, and idempotent money paths. The API is in early access — every InkOps plan can request it.
# Create a key in Settings → API, then:
curl https://app.inkops.ai/api/v1/me \
-H "Authorization: Bearer ik_..."
# Price 48 three-color prints through YOUR matrices
curl https://app.inkops.ai/api/v1/pricing/quote \
-H "Authorization: Bearer ik_..." \
-H "Content-Type: application/json" \
-d '{"method":"screen_print","quantity":48,"colorCount":3}'The contract, in one table.
Everything staff can do in the app, machines can do at app.inkops.ai/api/v1. Predictable envelopes, cursor pagination, GUID ids, and money as decimal strings.
| Resource | Endpoints | Notes |
|---|---|---|
| Introspection | GET /me | Key + shop info — the connectivity test. |
| Customers | GET · POST /customers, GET · PATCH /customers/{id} | Search, contacts, duplicate detection. |
| Orders & quotes | GET · POST /orders, GET · PATCH /orders/{id}, line-item CRUD | Quotes are orders with type "quote". Totals derive from line items. |
| Statuses | GET /statuses | Your pipeline's status ids for order updates. |
| Proposals | GET /proposals, GET /proposals/{id}, POST /proposals/{id}/transition | Draft → sent → closed with guarded transitions. |
| Invoices & payments | GET · POST /invoices, GET /invoices/{id}, GET · POST /invoices/{id}/payments | Payments require an Idempotency-Key — money is recorded at most once per key. |
| Production | GET /production-jobs, PATCH /production-jobs/{id} | Schedule window and status updates. |
| Catalog & pricing | GET /catalog/products, POST /pricing/quote | Supplier catalog plus your own pricing matrices. |
| Webhooks | GET · POST /webhooks, GET /webhooks/{id}/deliveries, POST /webhooks/{id}/test | Manage signed event subscriptions programmatically. |
| Events & messages | GET /events, GET /communications/{id} | Poll the fact log; read full inbound messages. |
The always-current, machine-readable contract lives at /api/v1/openapi.json — generated from the same registry the routes are tested against, so it cannot drift.
Payments require an Idempotency-Key. Retry the same request all you like — the payment is recorded once.
Keys are hashed at rest, scoped read or read & write, revocable instantly, and every write is attributed to the key that made it.
Uniform { error: { code, message, requestId } } envelopes, validation details included, and a request id on every response.
React when the shop moves.
Subscribe an https endpoint in Settings → API (or via the API) and InkOps POSTs signed JSON when it happens. At-least-once delivery, automatic retries with backoff, and a delivery log you can actually read.
Deliveries are signed per the Standard Webhooks spec — any svix-compatible verifier works. Prefer polling? GET /events serves the same fact log with a cursor.
{
"id": "<delivery id — dedupe on this>",
"type": "order.status_changed",
"occurredAt": "2026-07-14T18:04:11.000Z",
"shopId": "...",
"data": { "orderId": "...", "toStatusId": "...", "order": { ... } }
}import { Webhook } from "svix";
const wh = new Webhook(process.env.INKOPS_WEBHOOK_SECRET);
const event = wh.verify(rawBody, {
"svix-id": req.headers["svix-id"],
"svix-timestamp": req.headers["svix-timestamp"],
"svix-signature": req.headers["svix-signature"],
});Your agent, working the counter.
InkOps runs a remote MCP server. Point Claude — or any MCP-capable agent — at it with an API key and it gets 17 tools: look up customers, build quotes and orders, create invoices, record payments safely, price jobs, read messages, and watch the event log.
| Claude Code | Supported |
| Claude API (MCP connector) | Supported |
| Cursor | Supported |
| MCP inspector | Supported |
| Claude.ai web connectors | Not yet |
claude mcp add --transport http inkops \
https://app.inkops.ai/api/mcp \
--header "Authorization: Bearer ik_..."
# Then just ask:
# "Quote 72 hoodies, 2-color front, for Bridger Brewing —
# and send the proposal."Every tool call runs the same scope checks, rate limits, and idempotency as the REST API — an agent with a read-only key can look but not touch, and payment recording is at-most-once by construction.
Build on your shop, not around it.
The Platform API is rolling out to InkOps shops now. Tell us what you're building — a script, a Zapier-style bridge, or a full agent — and we'll switch your shop on.
Keys are created in Settings → API inside InkOps. Docs ship with the product.
Or email hello@inkops.ai