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 packetsPOST/v1/packetsCreate a packetGET/v1/packets/{id}Read a packetPOST/v1/packets/{id}/correctCorrect a packet in flightGET/v1/packets/{id}/documentsList documentsGET/v1/packets/{id}/documents/{documentId}Download a documentGET/v1/packets/{id}/fieldsRead field valuesGET/v1/packets/{id}/partiesList partiesPOST/v1/packets/{id}/resendResend to outstanding partiesPOST/v1/packets/{id}/sendSend a packetPOST/v1/packets/{id}/voidVoid a packet
Templates
GET/v1/templatesList templatesPOST/v1/templatesCreate a templateGET/v1/templates/{id}Read a templateDELETE/v1/templates/{id}Delete a template
Evidence
GET/v1/packets/{id}/audit-eventsRead the audit trailGET/v1/packets/{id}/certificateRead the Signing Certificate
Signing
POST/v1/packets/{id}/signing-sessionsMint a signing session
Webhooks
GET/v1/webhooksList webhook endpointsPOST/v1/webhooksCreate a webhook endpointPUT/v1/webhooks/{id}Update a webhook endpointDELETE/v1/webhooks/{id}Delete a webhook endpointGET/v1/webhooks/deliveriesRead the delivery logPOST/v1/webhooks/deliveries/{id}/replayReplay a delivery
Account
GET/v1/capabilitiesRead the capability objectGET/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.