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.