Accounts API
The workspaces a credential can reach, the workspace audit log, and SCIM user provisioning. Every operation here is an extension; no compatibility client calls any of it.
Updated
On this page
8 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
/workspacesList workspaces - GET
/audit_logList the workspace audit log - POST
/sso/scim/tokenIssue a SCIM token - GET
/scim/v2/UsersSCIM — list users - POST
/scim/v2/UsersSCIM — create a user - GET
/scim/v2/Users/{id}SCIM — get a user - PATCH
/scim/v2/Users/{id}SCIM — deactivate or reactivate a user - DELETE
/scim/v2/Users/{id}SCIM — deprovision a user
GET /workspaces
List workspaces Extension
Every workspace the caller can reach, sorted by name. Readable by any role.
An API key belongs to exactly one workspace, so it sees a single entry with role: admin.
The list item is a smaller object than every other workspace response here — no
default_language, or created_at — and its test_mode is
always false for a person, whatever the key would report.
- Base URL
https://api.signclad.com/api/v1- Authentication
- API key or OAuth 2.1 access token or Session
Responses
| Status | Description |
|---|---|
200 | The workspaces. |
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/workspaces \
-H "X-Api-Key: $SIGNCLAD_API_KEY" GET /audit_log
List the workspace audit log Extension
Who did what in this workspace, newest first, plus account-level entries such as plan
changes. Requires manage_members. Cursor-paginated; the filters are applied as given and
never rejected.
- Base URL
https://api.signclad.com/api/v1- Authentication
- API key or Session
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
action | string | Optional | Exact match on the action name. |
limit | integer | Optional | |
cursor | string | Optional | Opaque cursor from a previous response's next_cursor. |
Responses
| Status | Description |
|---|---|
200 | A page of entries. |
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/audit_log \
-H "X-Api-Key: $SIGNCLAD_API_KEY" POST /sso/scim/token
Issue a SCIM token Extension
Mints the bearer token an IdP uses to provision users, and returns it once. Issuing a new one invalidates the old. The token is the tenant: SCIM calls carry no user and no role, so this value is the whole credential for the provisioning surface.
- Base URL
https://api.signclad.com/api/v1- Authentication
- API key or Session
Responses
| Status | Description |
|---|---|
201 | The token, shown once. |
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.sso reads This workspace has no usable SSO connection. |
Example request
curl -X POST https://api.signclad.com/api/v1/sso/scim/token \
-H "X-Api-Key: $SIGNCLAD_API_KEY" GET /scim/v2/Users
SCIM — list users Extension
RFC 7644 provisioning. The SCIM bearer token from POST /sso/scim/token is the whole
credential and identifies the workspace; there is no user and no role on this surface, and
every response — errors included — is application/scim+json with the SCIM error envelope
rather than Signclad's.
Only userName eq "value" is supported as a filter. sortBy and sortOrder are ignored
rather than refused.
- Base URL
https://api.signclad.com- Authentication
- SCIM token
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
filter | string | Optional | Only userName eq "value". Anything else is 400 invalidFilter. |
startIndex | integer | Optional | 1-based. |
count | integer | Optional | Page size. 0 returns no rows and only totalResults, which is how a provider sizes a sync before running one. |
Responses
| Status | Description |
|---|---|
200 | A page of users. |
400 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
401 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
403 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
Example request
curl -X GET https://api.signclad.com/scim/v2/Users \
-H "X-Api-Key: $SIGNCLAD_API_KEY" POST /scim/v2/Users
SCIM — create a user Extension
Provisions a membership. The body is read leniently, as IdPs vary: the address comes from
userName or the first valid emails[].value, the display name from displayName,
name.formatted, the given and family names, or the address; everything else in the payload
is ignored without complaint.
roles[].value is honoured when it is a real role, except owner, which is quietly
downgraded to admin — ownership is not something an IdP gets to grant. An address outside
the connection's allowed domains is refused.
externalId is the directory's own immutable handle for the person. It is stored verbatim
against the membership and echoed back on every read. It used to be discarded, and the
response answered Signclad's user id instead — which meant a provider that stored and
reconciled on it was matching against an identifier it never issued.
- Base URL
https://api.signclad.com- Authentication
- SCIM token
Request body
application/scim+json
| Property | Type | Required | Description |
|---|---|---|---|
active | boolean | Optional | |
displayName | string | Optional | |
emails | array of object | Optional | |
externalId | string | Optional | The IdP's own handle, as it was supplied on create. Omitted entirely when there is none. |
id | string | Optional | |
meta | object | Optional | |
name | object | Optional | |
roles | array of object | Optional | One entry. owner is downgraded to admin on the way in. |
schemas | array of string | Optional | |
userName | string (email) | Optional |
Responses
| Status | Description |
|---|---|
201 | The provisioned user. |
400 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
401 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
403 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
409 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
Example request
curl -X POST https://api.signclad.com/scim/v2/Users \
-H "X-Api-Key: $SIGNCLAD_API_KEY" GET /scim/v2/Users/{id}
SCIM — get a user Extension
A membership outside the token's workspace is 404, like one that does not exist.
- Base URL
https://api.signclad.com- Authentication
- SCIM token
Path parameters
| Name | Type | Description |
|---|---|---|
id | string | The membership id, which is what SCIM id means here. |
Responses
| Status | Description |
|---|---|
200 | The user. |
401 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
403 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
404 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
Example request
curl -X GET https://api.signclad.com/scim/v2/Users/{id} \
-H "X-Api-Key: $SIGNCLAD_API_KEY" PATCH /scim/v2/Users/{id}
SCIM — deactivate or reactivate a user Extension
Only active can change. Role, name, and address are not patchable, and asking to patch
one is a 400 rather than a silent no-op — a provisioning system that thinks it renamed
somebody should find out.
Operations and operations are both accepted, replace and add both work, and a string
"False" counts as false, because that is what Entra ID sends.
- Base URL
https://api.signclad.com- Authentication
- SCIM token
Path parameters
| Name | Type | Description |
|---|---|---|
id | string | The membership id, which is what SCIM id means here. |
Request body
application/scim+json
| Property | Type | Required | Description |
|---|---|---|---|
Operations | array of object | Optional | |
schemas | array of string | Optional |
Responses
| Status | Description |
|---|---|
200 | The patched user, in full. |
400 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
401 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
403 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
404 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
Example request
curl -X PATCH https://api.signclad.com/scim/v2/Users/{id} \
-H "X-Api-Key: $SIGNCLAD_API_KEY" DELETE /scim/v2/Users/{id}
SCIM — deprovision a user Extension
Archives the membership. The person's user record is untouched — they may be in other workspaces, and their signatures are evidence. Idempotent.
- Base URL
https://api.signclad.com- Authentication
- SCIM token
Path parameters
| Name | Type | Description |
|---|---|---|
id | string | The membership id, which is what SCIM id means here. |
Responses
| Status | Description |
|---|---|
204 | Deprovisioned. |
401 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
403 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
404 | The one exception: a 403 for a surface this workspace may not use carries no scimType at all, only status and detail. Read scimType as optional. The SCIM error envelope.… |
Example request
curl -X DELETE https://api.signclad.com/scim/v2/Users/{id} \
-H "X-Api-Key: $SIGNCLAD_API_KEY"