Sender attestation keys
Register a public key so you can sign the content you deliver. A sender signature proves a document is exactly what you sent, not just that Keepable sealed it.
By default Keepable's document seal proves a delivered file arrived intact. Sender attestation goes one step further: you sign the content yourself, so a recipient can prove the document is exactly what you produced, end to end. You register a public key once, keep the private key on your side, and attach a signature to each delivery you want attested.
Registering and using keys needs the content.write scope.
Register a public key
Generate an EC P-256 key pair. Send only the public key, in JWK form (RFC 7517); the private key never leaves your infrastructure.
curl -X POST https://api.keepable.co/sender/tenants/ten_01HXP/sender-keys \
-H "Authorization: Bearer $KEEPABLE_TOKEN" \
-H "Keepable-Version: 2026-05-24" \
-H "Content-Type: application/json" \
-d '{
"public_jwk": {
"kty": "EC",
"crv": "P-256",
"x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0"
}
}'{ "key_id": "snk_01HXP" }The returned key_id is the key's published id. You will pass it as
sender_key_id on every attested delivery, so store it alongside your private
key.
xandyare the base64url (unpadded) curve coordinates.- List your keys, active and retired, newest first, with
GET /sender/tenants/{id}/sender-keys. - Retire a key with
DELETE /sender/tenants/{id}/sender-keys/{key_id}. Content already sealed over it stays verifiable; the key just cannot sign new deliveries.
Sign a delivery
For each document you want attested:
Compute the canonical content hash of the raw bytes you are sending.
Sign that hash with your private key to produce a base64 ECDSA P-256 signature.
Send the content with sender_signature set to that signature and
sender_key_id set to the registered key's id.
{
"recipient": { "identifier_type": "nin", "identifier": "12345678901" },
"subject": "Your loan agreement",
"content_type": "letter",
"parts": [ { "name": "agreement.pdf", "media_type": "application/pdf", "data": "JVBER…" } ],
"sender_signature": "MEUCIQD…",
"sender_key_id": "snk_01HXP"
}Keepable verifies the signature against your registered key and chains the document seal over it, so the recipient's verification proves both that Keepable sealed the file and that you signed the exact bytes.
Attestation is only accepted for non-transformed content. If Keepable would sanitise the body (for example an HTML part), the signature no longer matches the stored bytes and the delivery is rejected. Attest PDFs and other byte-stable documents.
When to use it
Reach for sender attestation when the recipient, or a third party they show the document to, needs to trust you as the origin, not just Keepable as the custodian: loan agreements, legal notices, anything where "this came unaltered from the issuing institution" is the point. For everyday mail, the standard seal is enough.
Batch send & templates
Deliver to many recipients in one job, either shared content to a list (Mode A) or a distinct document per recipient (Mode B), and save reusable compose presets, all without a client-side loop.
Agreements
Run e-signature workflows. Send a document to one or more signers, track signatures as they land, and download a tamper-evident PAdES-LTV covenant when everyone has signed.