Skip to main content
The Dealroom API uses API keys backed by Auth0 Machine-to-Machine (M2M) credentials. Every request requires a short-lived Bearer token obtained by exchanging your API key credentials.

Creating an API key

Create an API key via the Dealroom dashboard or the API. You need the create:api-keys permission.
curl -X POST https://api.dealroom.co/api/api-keys \
  -H "Authorization: Bearer $USER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production integration",
    "permissions": ["read:entities", "read:investors"]
  }'
Response:
{
  "data": {
    "id": 1,
    "name": "Production integration",
    "client_id": "abc123def456",
    "client_secret": "secret_shown_only_once",
    "permissions": ["read:entities", "read:investors"],
    "last_used_at": null,
    "created_at": "2026-03-18T12:00:00.000Z"
  }
}
Store client_id and client_secret securely. The secret is shown only once and cannot be retrieved later. If lost, revoke the key and create a new one.

Obtaining a Bearer token

Exchange your credentials for an access token at the Auth0 token endpoint:
curl -X POST https://$AUTH0_DOMAIN/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET",
    "audience": "https://api.dealroom.co",
    "grant_type": "client_credentials"
  }'
{
  "access_token": "eyJhbGciOiJSUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 86400
}
Tokens are valid for expires_in seconds (typically 24h). Cache and reuse them. Requesting a new token per API call is unnecessary and adds latency.

Making authenticated requests

Every request must include three headers:
HeaderDescriptionExample
AuthorizationBearer token from the token endpointBearer eyJhbGciOiJSUzI1NiIs...
User-AgentIdentifies your applicationMyApp/1.0 (contact@example.com)
X-Client-IdThe client_id issued when the API key was createdabc123def456
curl "https://api.dealroom.co/api/entities?limit=10&sort=-launch_year" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "User-Agent: MyApp/1.0 (you@example.com)" \
  -H "X-Client-Id: YOUR_CLIENT_ID"

Why three headers?

  • Authorization — authenticates the request via JWT.
  • User-Agent — identifies your application in access logs for analytics and debugging, without requiring JWT decoding on every log line.
  • X-Client-Id — cross-checked against the token’s sub claim as an extra authenticity guard. Must match the client_id used to obtain the token.

Error responses

Missing or invalid headers return 400 Bad Request:
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "User-Agent header is required for API key requests"
  }
}

Managing API keys

List your keys

curl https://api.dealroom.co/api/api-keys \
  -H "Authorization: Bearer $USER_TOKEN"

Revoke a key

curl -X DELETE https://api.dealroom.co/api/api-keys/1 \
  -H "Authorization: Bearer $USER_TOKEN"
Revoking a key immediately invalidates it.

Permissions

API keys support fine-grained scopes. You can only grant permissions that you already hold. Common permissions:
PermissionDescription
read:entitiesQuery companies, funds, people
read:investorsQuery investor profiles
read:foundersQuery founder profiles
read:transactionsQuery funding rounds
read:valuationsQuery company valuations

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.
  • Descriptive User-Agent — include your app name, version, and a contact email (e.g. MyApp/2.1 (api-team@company.com)).