Documents
The documents as sent, the signed copies and the certificate of signing.
The SigDocument object
Attributes
idrequired Type:stringnamerequired Type:stringcontent_typerequired Type:stringbytesrequired Type:integersha256required Type:stringpagesoptional Type:integernullfieldsoptional Type:"found""reading""none""given"found: we placed its fields; reading: a scan we are still reading; none: we found no places; given: you placed them. An open set.
signedoptional Type:objectnullThe signed copy, once everyone has signed and it's ready.
The SigCertificate object
Attributes
bytesrequired Type:integersha256required Type:stringtime_stamped_atoptional Type:stringnullWhen a time-stamp authority dated the seal.
check_codeoptional Type:stringnullThe code anyone can enter at unforged.ai/v to check the certificate.
Download a document
GET /sig/packages/{package_id}/documents/{document_id}/content
Needs sig:packages:read: See packages, their signers and signed files
The document as it was sent.
Parameters
package_idpathrequired Type:stringThe package's id.
document_idpathrequired Type:stringThe document's id.
Returns
200The document400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl "https://api.unforged.sh/sig/packages/{package_id}/documents/{document_id}/content" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/sig/packages/{package_id}/documents/{document_id}/content",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/sig/packages/{package_id}/documents/{document_id}/content', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); Download a signed copy
GET /sig/packages/{package_id}/documents/{document_id}/signed
Needs sig:packages:read: See packages, their signers and signed files
The document with everyone's signatures, initials and dates in place. Any later change to the file shows when it's opened. Ready shortly after the last signer signs (the sig.package.completed webhook says so); 404 until then.
Parameters
package_idpathrequired Type:stringThe package's id.
document_idpathrequired Type:stringThe document's id.
Returns
200The signed copy (PDF)400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl "https://api.unforged.sh/sig/packages/{package_id}/documents/{document_id}/signed" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/sig/packages/{package_id}/documents/{document_id}/signed",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/sig/packages/{package_id}/documents/{document_id}/signed', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); Download the certificate of signing
GET /sig/packages/{package_id}/certificate
Needs sig:packages:read: See packages, their signers and signed files
Who signed, when, where, on what device and how we know, with each document's fingerprint before signing and of its signed copy. The same pages are at the end of every signed copy. Ready with the signed copies; 404 until then.
Parameters
package_idpathrequired Type:stringThe package's id.
Returns
200The certificate (PDF)400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl "https://api.unforged.sh/sig/packages/{package_id}/certificate" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/sig/packages/{package_id}/certificate",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/sig/packages/{package_id}/certificate', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); Check a signed copy
POST /sig/check
Needs sig:packages:read: See packages, their signers and signed files
Send a signed copy or certificate as the request body. The answer says whether anything in it has changed since it was signed, when it was time-stamped, and which of your packages it came from. No Idempotency-Key is needed.
Returns
200Type:SigCopyCheckWhat the check found400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)413Type:Problemtoo_large421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X POST "https://api.unforged.sh/sig/check" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.post(
"https://api.unforged.sh/sig/check",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/sig/check', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json());