Skip to main content

Drum API authentication, permissions and rate limits

Authenticate REST API requests, configure least-privilege roles, handle rate limits and keep Drum API tokens secure.

Written by Ben Walker

Every Drum REST API request uses an account-scoped bearer token. The request runs as the user who owns the token and is limited to that user's account, role and record access.

Base URL

All REST endpoints use:

https://app.getdrum.com/api/v1/

Create an API token

  1. In Drum, open Settings > API Tokens.

  2. Create a token for the user and account the integration will use.

  3. Set an expiry date.

  4. Copy the token and store it in a secrets manager. Drum does not show it again.

Send the token in the Authorization header:

Authorization: Bearer YOUR_API_TOKEN

Send JSON request bodies with:

Content-Type: application/json

An expired or invalid token returns 401. A valid token whose user has been removed from the account returns 403.

Permission model

Two permission checks apply to each request:

  1. The user's role must allow the HTTP verb.

  2. The user must be allowed to read or change the requested record in Drum.

HTTP verb

Role permission

GET, HEAD

api_read

POST

api_create

PATCH, PUT

api_update

DELETE

api_delete

A missing verb permission returns 403 with {"error":"Insufficient API permissions"}.

A record that the user cannot read normally returns 404, so the API does not reveal that a hidden record exists. A write the user cannot perform on a visible record returns 403 with {"error":"Forbidden"}.

Account administrators bypass the verb checks and have every record permission. An administrator token therefore gives an integration full write access to the account.

Endpoint permissions

Endpoint

Required record permissions

Read opportunities

A project read permission: read_all_projects, read_team_projects or read_assigned_projects

Update an opportunity

update_all_opportunities, update_team_opportunities or update_assigned_opportunities

Convert an opportunity

Opportunity update access plus create_projects; sending budget_cents also requires view_opportunity_financial_values

Read project costs

read_costs plus access to the project

Create a project cost

create_costs plus access to the project

Read project statuses or lead scores

No additional record permission

Read cost types or finance accounts

read_costs

Read companies

read_companies

Read members

read_account_users or manage_permissions

Financial fields are returned only when the token user has the corresponding Drum permission. For example, view_opportunity_financial_values controls the amount field on opportunities, and view_project_metrics controls cost totals.

Recommended integration user

Create a dedicated integration user with a role that contains only the required permissions. Avoid using an administrator token.

For an integration that converts opportunities, the typical permission set is:

  • api_read

  • api_create

  • read_all_projects

  • update_all_opportunities

  • create_projects

  • view_opportunity_financial_values only when the integration sends budget_cents

For an integration that creates costs, the typical permission set is:

  • api_read

  • api_create

  • read_all_projects

  • read_costs

  • create_costs

  • read_account_users only when it creates staff costs

  • view_project_metrics only when it needs cost totals in responses

Add api_update only when the integration also edits opportunities. Give every token an expiry and rotate it before that date.

Rate limits

Scope

Limit

All /api/v1/ requests

300 requests per minute for each account token

POST /api/v1/opportunities/:id/convert

30 requests per minute for each account

A request blocked by the API throttle returns 429 and includes a Retry-After header. Opportunity conversion can also return 409 with code rate_limited. Handle both by waiting and retrying with backoff.

Error format

Most API errors use:

{
"error": "Human-readable message",
"code": "machine_readable_code"
}

Validation errors may also include field or an errors array. Treat the HTTP status as the primary result and use code for program logic.

Security

  • Keep tokens on the server. Do not put them in browser code or mobile apps.

  • Do not include tokens in URLs, logs or support messages.

  • Store tokens in a secrets manager or encrypted environment variable.

  • Rotate a token immediately if it may have been exposed.

  • Use a separate token for each integration so it can be revoked independently.

Did this answer your question?