API docs

Create a key on the developer page. Send it as a bearer token. Examples below use the same routes as the OpenAPI file.

Send a PDF, collect verified signatures, and download the sealed file. The visual stamp on Sign PDF stays free and in the browser.

Send the key as Authorization: Bearer gk_live_... Create key. OpenAPI JSON

cURL

curl -X POST https://gustkit.com/api/v1/envelopes \
  -H "Authorization: Bearer gk_live_..." \
  -H "Idempotency-Key: envelope-42" \
  -H "Content-Type: application/json" \
  -d '{"pdfBase64":"<base64>","ownerName":"Rui","signers":[{"email":"[email protected]","name":"Ana","role":"client"}],"copies":["[email protected]"],"order":"sequential","fields":[{"signer":0,"page":1,"x":0.55,"y":0.8,"w":0.32,"h":0.08,"kind":"signature"}],"lang":"en"}'

JavaScript

const res = await fetch("https://gustkit.com/api/v1/envelopes", {
  method: "POST",
  headers: {
    Authorization: "Bearer gk_live_...",
    "Content-Type": "application/json",
    "Idempotency-Key": "envelope-42",
  },
  body: JSON.stringify({
    pdfBase64,
    signers: [{ email: "[email protected]", name: "Ana", role: "client" }],
    copies: ["[email protected]"],
    order: "parallel",
    fields: [{ signer: 0, page: 1, x: 0.55, y: 0.8, w: 0.32, h: 0.08, kind: "signature" }],
    lang: "en",
  }),
});
const envelope = await res.json();

Python

import requests
res = requests.post(
    "https://gustkit.com/api/v1/envelopes",
    headers={"Authorization": "Bearer gk_live_...", "Idempotency-Key": "envelope-42"},
    json={"pdfBase64": pdf_b64, "signers": [{"email": "[email protected]", "name": "Ana"}], "copies": ["[email protected]"], "order": "parallel", "lang": "en"},
)
print(res.status_code, res.json())

Errors

Errors are JSON: error.code and error.message. 401 means the key is missing or revoked. 402 means the free quota is used while billing is on. 409 means a conflict, including a reused idempotency key with a different body. 429 means you hit the per-key rate limit.