The manual
Docs.
Everything here speaks plain HTTP. Send a PDF with one request. No key needed: we email you a one-time code and hand back a throwaway key for that document. Log in to mint live keys.
View as machine
Send
POST /v1/documents$ curl -F title='Repair authorization' \
-F sender_email=you@example.com \
-F signers='[{"name":"Jane",
"email":"jane@example.com"}]' \
-F file=@form.pdf \
https://agentsign.co/v1/documents
{ "id": "doc_kx3q9", "status": "sent" }Send
POST /v1/documents$ curl -F title='Repair authorization' \
-F sender_email=you@example.com \
-F signers='[{"name":"Jane",
"email":"jane@example.com"}]' \
-F file=@form.pdf \
https://agentsign.co/v1/documents
{ "id": "doc_kx3q9", "status": "sent" }Keys
sign_live_ sends, lists, and downloads. Mint one after you log in.
sign_tmp_ follows one document: status and download only. It cannot send. You get one when you send without logging in.
sign_agent_ names an agent. It signs off on its turn and gets a cryptographic receipt, not a pretend signature. It never signs for a person.
View as machine
Status
GET /v1/documents/{id}$ curl https://agentsign.co/v1/documents/doc_kx3q9 \
-H 'authorization: Bearer sign_live_...'
{ "status": "completed", "signers": [ … ], "audit": [ … ] }Status
GET /v1/documents/{id}$ curl https://agentsign.co/v1/documents/doc_kx3q9 \
-H 'authorization: Bearer sign_live_...'
{ "status": "completed", "signers": [ … ], "audit": [ … ] }Verify
Anyone can POST a sealed file back and get the verdict: valid or not, plus how many people signed and how many agents signed off. No key, no account. The file is the proof.
View as machine
Verify
POST /v1/verify$ curl -F file=@sealed.pdf \
https://agentsign.co/v1/verify
{ "valid": true, "human_signatures": 1, "agent_attestations": 1 }Verify
POST /v1/verify$ curl -F file=@sealed.pdf \
https://agentsign.co/v1/verify
{ "valid": true, "human_signatures": 1, "agent_attestations": 1 }