The API is on the same meter as the app.

Same allowance, same price, every plan. A packet you create through the API costs exactly what one you create by hand costs, which is nothing until it is sent.

Decisions worth knowing before you start

There is no sign endpoint

A signature is only ever applied inside a session the party authenticated into. You can mint that session through the API; you cannot apply a signature with an API key.

Cursor pagination everywhere

Never an offset. A list that changes under you cannot skip or repeat rows.

Real JSON types

Booleans are booleans and numbers are numbers. Nothing arrives as the string "true".

One error shape

A code, a message, the request id, a link to the explanation, and whether retrying unchanged is worth your time.

You choose the ids

Documents and people carry ids you assign, unique within the packet, so a whole packet is one request with no round trip to learn ours.

Explicit transitions

Sending is a call to send. Writing a status field never triggers anything.

Every route, all 26 of them

Packets

  • GET/v1/packetsList packets
  • POST/v1/packetsCreate a packet
  • GET/v1/packets/{id}Read a packet
  • POST/v1/packets/{id}/correctCorrect a packet in flight
  • GET/v1/packets/{id}/documentsList documents
  • GET/v1/packets/{id}/documents/{documentId}Download a document
  • GET/v1/packets/{id}/fieldsRead field values
  • GET/v1/packets/{id}/partiesList parties
  • POST/v1/packets/{id}/resendResend to outstanding parties
  • POST/v1/packets/{id}/sendSend a packet
  • POST/v1/packets/{id}/voidVoid a packet

Templates

  • GET/v1/templatesList templates
  • POST/v1/templatesCreate a template
  • GET/v1/templates/{id}Read a template
  • DELETE/v1/templates/{id}Delete a template

Evidence

  • GET/v1/packets/{id}/audit-eventsRead the audit trail
  • GET/v1/packets/{id}/certificateRead the Signing Certificate

Signing

  • POST/v1/packets/{id}/signing-sessionsMint a signing session

Webhooks

  • GET/v1/webhooksList webhook endpoints
  • POST/v1/webhooksCreate a webhook endpoint
  • PUT/v1/webhooks/{id}Update a webhook endpoint
  • DELETE/v1/webhooks/{id}Delete a webhook endpoint
  • GET/v1/webhooks/deliveriesRead the delivery log
  • POST/v1/webhooks/deliveries/{id}/replayReplay a delivery

Account

  • GET/v1/capabilitiesRead the capability object
  • GET/v1/usageRead the usage ledger

This list is read from the same document the server validates requests against, so it cannot describe a route that behaves differently or miss one that was added without anybody remembering this page.

Webhooks

Deliveries are signed over the timestamp and the body together, so a captured request cannot be replayed at you later. Failures back off, an endpoint that keeps failing is suspended rather than retried forever, and everything that failed is listed for you to replay yourself.