Skip to content

Authentication

Authenticate to the Signkoi API with an API key in the Authorization header. Scopes, expiry, rotation and keeping keys safe.

On this page

API keys

Every request to https://signkoi.com/api/v1 is authenticated with an API key, sent as a bearer token in the Authorization header. Requests without a valid key are rejected with 401.

Request
GET /api/v1/envelopes HTTP/1.1
Host: signkoi.com
Authorization: Bearer <your API key>
Accept: application/json
  • Create and revoke keys in Developer → API keys. An account can have up to 20 keys.
  • A key is shown once, when you create it. Signkoi stores only a hash, so a lost key can't be recovered — create a new one.
  • A key acts as the account that created it: it sees that account's envelopes, templates and webhooks.
  • Keys work only on /api/v1. They are refused by the website's internal endpoints, and website sessions or mobile-app tokens are refused by /api/v1.
  • GET/v1/me works with any key and tells you its name, scopes and expiry.

Scopes

Give each key only what it needs. Pick Full access, Read only or individual scopes when you create it. Each endpoint in the reference lists the scopes it requires.

API key scopes
ScopeAllows
envelopes:readList and read envelopes, recipients, fields and the audit trail; download files.
envelopes:writeCreate, update, send, remind and void envelopes.
templates:readList and read templates.
templates:writeCreate envelopes from templates.
webhooks:readList webhook endpoints and deliveries.
webhooks:writeCreate, update, delete and test webhook endpoints.
account:readRead the account profile, plan and usage.

Creating an envelope from a template needs both templates:write and envelopes:write. Without account:read, GET /v1/me still answers but leaves out plan and usage. A request with a missing scope fails with 403 and tells you which scope is missing:

403 · application/json
{
  "error": {
    "type": "permission_error",
    "code": "insufficient_scope",
    "message": "This API key doesn't have the \"envelopes:write\" scope.",
    "required_scope": "envelopes:write",
    "request_id": "0f6c8f5e-2b1d-4c3a-9e7f-5a8b1c2d3e4f"
  }
}

Expiry and rotation

Keys can expire after 30, 90 or 365 days, or never. An expired or revoked key gets 401 invalid_api_key. To rotate a key without downtime:

  1. Create a new key with the same scopes.
  2. Deploy it to your servers and confirm requests succeed (check its “last used” time on the dashboard).
  3. Revoke the old key. Revocation is immediate.

Keeping keys safe

  • Call the API from your server only. Never ship a key in a web page, browser extension or mobile app.
  • Store keys in a secret manager or environment variables, not in source control.
  • Use one key per integration, so you can revoke one without breaking the others, and see per-key usage.
  • If a key leaks, revoke it at once and create a new one.

Your team and your data

The API respects the same rules as the website: you only ever see envelopes you own (other envelopes return 404), plus templates your team shares with you.

Authentication errors

Authentication errors
StatusCodeMeaning
401api_key_missingNo Authorization header, or not a bearer token.
401invalid_api_keyThe key is wrong, expired or revoked — or it is not an API key.
403insufficient_scopeThe key lacks the scope named in required_scope.
403account_suspendedThe account is suspended. Contact support.

Unauthenticated requests are also rate limited to 30 per minute per IP address, so a misconfigured client fails fast rather than hammering the API.