client_credentials grant. Exchange your client ID and secret at the token endpoint for a short-lived Bearer token, then include that token in the Authorization header on every API call. Tokens are scoped to an owner organization and carry permissions configured at client provisioning time.
Token Endpoints
Use the endpoint that matches your target environment:Requesting a Token
Send aPOST request to the token endpoint with your client credentials and the client_credentials grant type. Credentials are passed via HTTP Basic auth (client ID as the username, client secret as the password).
expires_in window (minus a small buffer) and request a new one before it expires. Do not request a new token on every API call.
Scopes
Request one or more of the following scopes in thescope parameter, separated by spaces:
Scopes are not yet enforced at the API layer, but they will be. Request only the scopes your integration needs today so it keeps working once enforcement is enabled. Actual access is currently governed by the permissions attached to your client at provisioning time.
Sending Your Token
Include the access token in theAuthorization header with the Bearer scheme:
curl:
api.slate.inc — for example /accounts, /files, /qc, /signatures, and /users. The same Bearer token works across every service. All requests, including GET, POST, PATCH, and DELETE, require this header.
Treat your client secret and access tokens like passwords. Never commit them to source control, log them, or expose them in client-side code. Store them in a secrets manager or environment variable.
Owner Scoping
Your client is bound to a single owner, the organization Slate uses to isolate your data. Slate delivers yourowner identifier alongside your client credentials. Every account, file, signature, and QC record you create or retrieve is scoped to that owner automatically, and you do not need to pass the owner identifier on standard requests.
List endpoints
List endpoints require you to specify the owner explicitly to keep them context-free. Pass yourowner identifier as a query parameter, and it must be an owner your token is authorized to read:
owner parameter will be rejected.
Getting Client Credentials
Slate does not provide self-serve client registration. To obtain a client ID and secret:- Contact your Slate account manager and provide the name or identifier of the service you are building, along with the scopes and permissions it needs.
- Slate provisions a client scoped to your owner with the requested permissions and delivers the client ID, client secret, and
owneridentifier through a secure channel. - Store the client ID and secret in your secrets manager and reference them at runtime via environment variables (for example,
SLATE_CLIENT_IDandSLATE_CLIENT_SECRET).
Error Responses
Token endpoint errors
The token endpoint returns standard OAuth 2.0 error responses when a token request fails:API errors
When authentication fails on an API request, Slate returns401 Unauthorized with a JSON body:
Account identifier (crid) uniqueness
When you upsert accounts, you supply acrid (your identifier for the account in your own system), and that value must be unique within your owner. Two different owners may use the same crid without conflict, but within a single owner, each crid maps to exactly one Slate account. Because crid is the natural key the upsert matches on, re-sending the same crid updates the existing record rather than creating a new one.