// DEVELOPERS

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.

Quick start
# 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}'
// REST API

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.

ResourceEndpointsNotes
IntrospectionGET /meKey + shop info — the connectivity test.
CustomersGET · POST /customers, GET · PATCH /customers/{id}Search, contacts, duplicate detection.
Orders & quotesGET · POST /orders, GET · PATCH /orders/{id}, line-item CRUDQuotes are orders with type "quote". Totals derive from line items.
StatusesGET /statusesYour pipeline's status ids for order updates.
ProposalsGET /proposals, GET /proposals/{id}, POST /proposals/{id}/transitionDraft → sent → closed with guarded transitions.
Invoices & paymentsGET · POST /invoices, GET /invoices/{id}, GET · POST /invoices/{id}/paymentsPayments require an Idempotency-Key — money is recorded at most once per key.
ProductionGET /production-jobs, PATCH /production-jobs/{id}Schedule window and status updates.
Catalog & pricingGET /catalog/products, POST /pricing/quoteSupplier catalog plus your own pricing matrices.
WebhooksGET · POST /webhooks, GET /webhooks/{id}/deliveries, POST /webhooks/{id}/testManage signed event subscriptions programmatically.
Events & messagesGET /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.

Idempotent money

Payments require an Idempotency-Key. Retry the same request all you like — the payment is recorded once.

Shop-scoped keys

Keys are hashed at rest, scoped read or read & write, revocable instantly, and every write is attributed to the key that made it.

Honest errors

Uniform { error: { code, message, requestId } } envelopes, validation details included, and a request id on every response.

// WEBHOOKS

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.

order.createdorder.status_changedpayment.receivedproof.sentproof.approvedproof.changes_requestedproposal.sentproposal.approvedinvoice.sentcustomer.createdmessage.received

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.

Envelope
{
  "id": "<delivery id — dedupe on this>",
  "type": "order.status_changed",
  "occurredAt": "2026-07-14T18:04:11.000Z",
  "shopId": "...",
  "data": { "orderId": "...", "toStatusId": "...", "order": { ... } }
}
Verify (node)
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"],
});
// BRING YOUR OWN AI AGENT

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 CodeSupported
Claude API (MCP connector)Supported
CursorSupported
MCP inspectorSupported
Claude.ai web connectorsNot yet
Connect from Claude Code
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.

// EARLY ACCESS

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.

Book a Demo

Keys are created in Settings → API inside InkOps. Docs ship with the product.

Or email hello@inkops.ai