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
/meGet the current membership - GET
/email_suppressionsList suppressed addresses - DELETE
/email_suppressions/{id}Lift a suppression - GET
/contactsList contacts - POST
/contactsCreate or update a contact - GET
/contacts/suggestSuggest contacts - PATCH
/contacts/{id}Update a contact - DELETE
/contacts/{id}Delete a contact - POST
/contacts/importImport contacts from a CSV
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"