Authentication
Every request carries a credential in the Authorization header. AbleTime has two kinds, and they answer different questions: an API key acts for your organization, and a personal access token (PAT) acts for one person.
Authorization: Bearer <your-credential>Organization API keys
An API key is the credential most integrations use. It belongs to the organization rather than to whoever created it, so it keeps working when people join or leave.
Creating one
Go to Settings > Integrations > API Keys and add a key. You choose its name, the grants it carries, and optionally an expiry date.
Afterwards the list shows each key's name, key prefix (a short non-secret fragment that lets you tell keys apart), grants, status, creation date and expiry. Revoking a key takes effect immediately and also stops any webhooks bound to that key.
Grants
A grant is a single named permission. A key carries a fixed set of them, chosen when you create it, and every endpoint states which grant it requires. A key with no grant for an endpoint is refused with 403 even though the key itself is perfectly valid.
Grant | Allows |
|---|---|
| Reading time entries and timers, and binding webhooks for timeentry events in Settings → Integrations → Webhooks (the bound key needs timeentry.read) |
| Creating, updating and deleting time entries, and operating timers |
| Reading tasks, and reading epics, and binding webhooks for task and epic events in Settings → Integrations → Webhooks (the bound key needs task.read) |
| Creating and updating tasks, everything on a task, and creating and updating epics |
| Reading milestones, and binding webhooks for milestone events in Settings → Integrations → Webhooks (the bound key needs milestone.read) |
| Creating, updating and deleting milestones |
| Including a task's comments via |
| Reading invoices, and binding webhooks for invoice events in Settings → Integrations → Webhooks (the bound key needs billing.read) |
| Moving an invoice to a new status |
| Reading projects |
| Reading clients, and expanding a project's client |
| Reading users, and expanding a project's members |
| Reading calendar entries, with a personal access token |
| Writing calendar entries, with a personal access token |
Give a key the smallest set that does its job. A key that only reports on hours needs reading grants and nothing else.
task.read; creating, updating, deleting or changing the state of one needs task.write.Personal access tokens
A personal access token belongs to one person. Each person mints their own from their profile, under API Access, and holds at most one at a time; rotating replaces the old token immediately.
A token carries that person's identity and their role in the organization. It carries no grants at all, because what it may do is decided by who its holder is and by which projects they belong to, exactly as it would be in the application.
Personal access tokens exist for work that is inherently about one person. Calendar entries are the clearest case: they hold proposed time a person has not yet committed, so they are reachable only with that person's own token, never with an organization key.
Your organization must also have agent access enabled for personal access tokens to work. Without it a valid token is refused.
Choosing between them
API key | Personal access token | |
|---|---|---|
Acts for | The organization | One person |
Prefix |
|
|
Created in | Settings > Integrations > API Keys | Your profile, under API Access |
How many | As many as you need | One per person |
Permissions | The grants you assign | The holder's role and project membership |
Survives the creator leaving | Yes | No |
Reaches calendar entries | No | Yes |
When authentication fails
Status | Code | What it means |
|---|---|---|
401 |
| No Authorization header, or it is not a bearer token |
401 |
| The credential is unknown, revoked or expired |
403 |
| The credential is fine, but the organization's plan does not include API access |
403 |
| The key is valid but lacks the grant this endpoint requires |
403 |
| This endpoint takes a personal access token and an organization key was sent |
403 |
| The organization has not enabled agent access |