- Programmatic (M2M) keys — for server-side integrations using the OAuth2 client credentials grant. Each key has a
client_idandclient_secret. - Browser app (application) keys — for single-page apps (SPAs) using Authorization Code + PKCE. No
client_secret; read-only permissions only. These are not self-serve — contact us and we will provision one for you.
Creating an API key
Programmatic keys are self-serve from the Dealroom dashboard. Browser app keys are provisioned by us on request.From the Dealroom dashboard
Go to Settings > API in your Dealroom dashboard:
- Click + Create key.
- Enter a descriptive name (e.g.
Production — Data Pipeline). This is a label for you; it is not sent to the API. - Select the scopes the key should carry. You can only grant scopes your own account holds, and at least one is required. Scopes cannot be changed later — to change them, revoke the key and create another.
- Click Create key.
- Copy the
client_secretimmediately. It is shown once and cannot be retrieved afterwards. Theclient_idstays visible on the key’s page.
There is no key-type choice in the dialog: the dashboard creates Programmatic
(M2M) keys. For a browser app key, contact us.
Quick start
Install the dependencies for your language and start making API calls in under a minute. The SDKs handle token exchange, caching, and automatic refresh — you just provide your credentials.Node.js setup
Node.js setup
bash npm install simple-oauth2 axios Python setup
Python setup
bash pip install authlib requests Obtaining a Bearer token
If you prefer to handle token management yourself, exchange your credentials at the Auth0 token endpoint:expires_in seconds (typically 24h). Cache and reuse them. Requesting
a new token per API call is unnecessary and adds latency.
The
audience value (https://api-next.beta.dealroom.co) is an OAuth2 identifier, not a URL you
call — it deliberately differs from the API base URL (https://api.beta.dealroom.app). Use
both exactly as written; “fixing” the audience to match the base URL makes the
token exchange fail.Making authenticated requests
Every request must include two headers:Why two headers?
Authorization— authenticates the request via JWT.X-Client-Id— cross-checked against the token’ssubclaim as an extra authenticity guard. Must match theclient_idused to obtain the token.
Error responses
Missing or invalid headers return 400 Bad Request:Permissions
API keys support fine-grained scopes. You can only grant permissions that you already hold. Common permissions:Usage dashboard
After making API requests, the dashboard Settings > API page shows:- Total requests — aggregated request count over time
- Endpoint breakdown — which endpoints are being called and how often
- Last used — when each key was last active
Best practices
- Principle of least privilege — only grant permissions your integration needs.
- Rotate regularly — revoke and recreate API keys periodically.
- Never commit secrets — use environment variables or a secrets manager.
- Cache tokens — reuse the access token for its full lifetime before refreshing.