Account

Request approval of an inbound sender

Asks for an address to be added to the workspace's authorized senders.

A credential cannot authorize an address, and this call mails nothing. It records a request: the grant is created pending with awaitingApproval: true, and no confirmation link exists yet. A workspace owner or admin approves it from the InkSeal dashboard, which mails a single-use link to the address; only opening that link from the mailbox activates the grant. Approval proves the workspace wants the address and the link proves whoever named it controls the mailbox, so neither alone is enough and controlling the mailbox never makes an address a sender. Report the pending request to your human and poll listAuthorizedSenders to see when it is active.

Re-adding a revoked address records a fresh request. Re-adding a pending one returns it unchanged, so a link a person already sent keeps working. An address that is already active answers 409 invalid_state rather than being reset, because that would drop a working grant back to pending and silently stop mail that works today. The workspace owner's own address answers 409 invalid_state too: it is authorized by construction.

post/account/authorized-senders

Request

  • Base URL: https://inkseal.net/api/v1
  • URL: https://inkseal.net/api/v1/account/authorized-senders
  • Auth: HTTP bearer

Headers

Idempotency-Keystring

Makes this mutation retry-safe. 1 to 255 printable ASCII characters (0x20 to 0x7e), trimmed before use. The key is scoped to the workspace and the credential that sent it. Reusing it with a different method, path, or payload answers 422 idempotency_key_reuse. A completed attempt replays its stored status and body with an Idempotent-Replay: true response header; 5xx, 429, and non-JSON answers leave the key retryable. A concurrent request holding the 90 second lease answers 409 idempotency_in_progress. Records are retained 24 hours.

Request body

emailstring email required

The address to authorize. Trimmed, and matched case-insensitively against the addresses already listed.

kind'alias' | 'delegate'

A label for the humans reading the list: alias is another address of someone already in the workspace, delegate is somebody else acting for it. Trust is identical either way.

Example request

{
  "email": "contracts@example.com",
  "kind": "delegate"
}

Response

The grant, pending and awaiting a workspace person's approval. confirmationEmailSent is always false here.

Example response

{
  "data": {
    "sender": {
      "id": "Sn4kR7pQx2LmVb9tY6cZw",
      "email": "contracts@example.com",
      "kind": "delegate",
      "status": "pending",
      "confirmationSentAt": "2026-08-21T09:14:02.000Z",
      "expiresAt": "2026-08-28T09:14:02.000Z",
      "createdAt": "2026-08-21T09:14:02.000Z",
      "updatedAt": "2026-08-21T09:14:02.000Z"
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.