Account API

The authenticated membership — who the credential belongs to, and which account and workspace it acts in — plus the workspace address book and the email suppression list.

Updated

On this page

9 operations, generated from openapi/signclad.v1.yaml. Try them in the interactive reference, browse every endpoint group, or read the guides for the prose version.

GET /me

Get the current membership

The membership the credential resolves to, with its user, account, workspace, and contact. Use it to check which workspace an API key belongs to.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or OAuth 2.1 access token or Session

Responses

Status Description
200 The membership.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
429 Rate limited. The message contains the literal 429 Too Many Requests for compatibility with clients that match on it.…

Example request

curl -X GET https://api.signclad.com/api/v1/me \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

Example response (200)

{
  "id": "01K4S7BQ2M3N4P5Q6R7S8T9VWX",
  "role": "owner",
  "archived": false,
  "is_admin": false,
  "user": {
    "id": "01K4S7BQ2MJ8ZCPX5R6T7V8W9Y",
    "name": "Bryce Matheson",
    "first_name": "Bryce",
    "last_name": "Matheson",
    "has_google_registration": false,
    "email": "[email protected]",
    "locale": "en",
    "timezone": "America/Denver"
  },
  "editor_features": {
    "conditional_rules": true,
    "data_validation": true
  },
  "account": {
    "id": "01K4S7BQ2MB3C4D5E6F7G8H9JK",
    "name": "Acme Lending",
    "plan_tier": "business",
    "active_templates": 12,
    "can_create_template": true,
    "can_create_tracking_document": true,
    "can_create_completion_document": true,
    "active_users": [
      {
        "id": "01K4S7BQ2MJ8ZCPX5R6T7V8W9Y",
        "name": "Bryce Matheson",
        "email": "[email protected]",
        "has_google_registration": false,
        "role": "owner"
      }
    ],
    "usage": {
      "documents_sent": 214,
      "documents_limit": null,
      "templates": 12,
      "templates_limit": null
    }
  },
  "workspace": {
    "id": "01K4S7BQ2MB3C4D5E6F7G8H9JK",
    "name": "Acme Lending",
    "plan_tier": "business",
    "active_templates": 12,
    "can_create_template": true,
    "can_create_tracking_document": true,
    "can_create_completion_document": true,
    "active_users": [
      {
        "id": "01K4S7BQ2MJ8ZCPX5R6T7V8W9Y",
        "name": "Bryce Matheson",
        "email": "[email protected]",
        "has_google_registration": false,
        "role": "owner"
      }
    ],
    "usage": {
      "documents_sent": 214,
      "documents_limit": null,
      "templates": 12,
      "templates_limit": null
    }
  },
  "current_workspace_id": "01K4S7BQ2MD5E6F7G8H9JKMNPQ",
  "contact": {
    "id": "01K4S7BQ2MF7G8H9JKMNPQRSTV",
    "name": "Bryce Matheson",
    "email": "[email protected]",
    "company": "Acme Lending",
    "job_title": "Operations",
    "phone_number": "+14155550142"
  }
}

GET /email_suppressions

List suppressed addresses Extension

Addresses this workspace can no longer mail, and why. A suppression list nobody can read is a black hole: a sender whose recipient bounced once should be able to see why the later invitations are not arriving. Owner and admin only — the list is a list of the workspace's recipients' email addresses. An API key is treated as an admin credential, matching GET /me. Released rows stay readable but are out of the default listing, which is about what is blocked now.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or OAuth 2.1 access token or Session

Query parameters

Name Type Required Description
email string (email) Optional Exact address, normalized before matching.
reason string Optional
include_released boolean Optional Include suppressions that have already been lifted.
cursor string Optional Opaque cursor from a previous response's next_cursor.
limit integer Optional Items per page.

Responses

Status Description
200 A page of suppressions, newest first.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…
429 Rate limited. The message contains the literal 429 Too Many Requests for compatibility with clients that match on it.…

Example request

curl -X GET https://api.signclad.com/api/v1/email_suppressions \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

DELETE /email_suppressions/{id}

Lift a suppression Extension

Lets Signclad mail the address again. The row is kept and marked released rather than deleted: releasing an address that hard bounced twice is a different decision from releasing one that bounced once, and a delete would hide the difference. A suppression in another workspace, or one already released, is a 404 — never a 403, which would confirm the id exists somewhere.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or Session

Path parameters

Name Type Description
id string (uuid) The suppression's id.

Responses

Status Description
204 Released.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…
404 No such record for this workspace. Signclad never answers 404 for a record that exists: a 404 is authoritative.
429 Rate limited. The message contains the literal 429 Too Many Requests for compatibility with clients that match on it.…

Example request

curl -X DELETE https://api.signclad.com/api/v1/email_suppressions/{id} \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

GET /contacts

List contacts Extension

The workspace's address book, by name. q matches across name, address, company, job title, and phone. Readable by any role; writing needs send_documents. limit is clamped rather than refused, so an out-of-range value is quietly corrected.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or Session

Query parameters

Name Type Required Description
q string Optional
cursor string Optional Opaque cursor from a previous response's next_cursor.
limit integer Optional

Responses

Status Description
200 A page of contacts.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…

Example request

curl -X GET https://api.signclad.com/api/v1/contacts \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

POST /contacts

Create or update a contact Extension

Create-or-update on the address, matched case-insensitively — so importing the same person twice does not make two rows. It answers 201 either way.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or Session

Request body

application/json

Property Type Required Description
company string or null Optional
email string (email) Optional
job_title string or null Optional
name string or null Optional
phone_number string or null Optional

Responses

Status Description
201 The contact, whether it was created or updated.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…
422 errors.email reads Another contact in this workspace already uses that address.

Example request

curl -X POST https://api.signclad.com/api/v1/contacts \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

GET /contacts/suggest

Suggest contacts Extension

Type-ahead for a recipient field. At most eight results, and a slimmer object than the list: no counts, no timestamps, no pagination.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or Session

Query parameters

Name Type Required Description
q string Optional

Responses

Status Description
200 Up to eight matches.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…

Example request

curl -X GET https://api.signclad.com/api/v1/contacts/suggest \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

PATCH /contacts/{id}

Update a contact Extension

Only the keys present change.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or Session

Path parameters

Name Type Description
id string

Request body

application/json

Property Type Required Description
company string or null Optional
email string (email) Optional
job_title string or null Optional
name string or null Optional
phone_number string or null Optional

Responses

Status Description
200 The updated contact.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…
404 No such record for this workspace. Signclad never answers 404 for a record that exists: a 404 is authoritative.
422 errors.email reads Another contact in this workspace already uses that address.

Example request

curl -X PATCH https://api.signclad.com/api/v1/contacts/{id} \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

DELETE /contacts/{id}

Delete a contact Extension

A soft delete: documents they are on keep naming them, because an audit trail that forgets who somebody was is not an audit trail.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or Session

Path parameters

Name Type Description
id string

Responses

Status Description
204 Deleted.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…
404 No such record for this workspace. Signclad never answers 404 for a record that exists: a 404 is authoritative.

Example request

curl -X DELETE https://api.signclad.com/api/v1/contacts/{id} \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"

POST /contacts/import

Import contacts from a CSV Extension

A CSV with an email column; name, company, title, and phone are optional, and each is matched against a list of spellings, so a file exported from another tool usually just works. Unrecognized columns are reported, not refused. 200 with a per-row report even when some rows failed — a partial import is the normal outcome. It only becomes a 422 when nothing could be imported, and then the failures arrive keyed by row and column under errors.contacts_csv.rows. update_existing defaults to true: an address already in the book is updated rather than skipped.

Base URL
https://api.signclad.com/api/v1
Authentication
API key or Session

Request body

multipart/form-data

Property Type Required Description
file string (binary) Required CSV, at most 5 MB and 5000 rows.
update_existing boolean Optional

Responses

Status Description
200 What was imported, and what was not.
401 Missing or invalid credentials. Unauthenticated requests are rate limited at 50 per minute.…
403 Authenticated, but not allowed to do this: an insufficient role, a credential type the route refuses, or a signer acting out of turn. meta.error always says which.…
422 errors.contacts_csv when the file cannot be parsed, has no email column, or has too many rows; errors.contacts_csv.rows.<row>.<column> when every row failed; and errors.base.upload_unreadable…

Example request

curl -X POST https://api.signclad.com/api/v1/contacts/import \
  -H "X-Api-Key: $SIGNCLAD_API_KEY"