Introduction
The DapApp API lets your own tools read and change the same things you can in the app: tasks, people, locations, calendars and your company's settings. It is a JSON API over HTTPS, and every request is made on behalf of a person, with a token that person created.
Base URL
Requests go to your DapApp address, followed by /api/v1:
https://your-company.dapapp.com/api/v1
The v1 is the version. Existing fields and behavior in a version do not change; new fields may be added, so ignore ones you do not recognise.
Making a request
Send your token as a bearer token and ask for JSON:
curl https://your-company.dapapp.com/api/v1/me \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json"
Successful responses wrap the result in data. Lists add links and meta for paging.
Ids
Every id in the API, such as a task's id or a calendar_id you send, is a UUID like 0195f0a1-7c2e-7b3a-9d41-6f0a2c8e1b07. Treat it as an opaque string.
What a token can do
A token never has more power than the person who made it. Three things decide what a request may do:
- The token's scopes. You choose them when you create the token. See Authentication.
- The scopes your role was given. Your company owner decides, role by role, which scopes people can put on tokens. If a role loses a scope, tokens that already carry it stop working for that scope.
- Your own permissions in the app. A token with
activities:createcan only create tasks if you can create tasks in the planner, and only on calendars you can reach.
Pagination
List endpoints return a page at a time. Use per_page to change the page size and page to move through the results:
{
"data": [],
"links": { "first": "...", "last": "...", "prev": null, "next": "..." },
"meta": { "current_page": 1, "last_page": 3, "per_page": 50, "total": 120 }
}
Dates and times
Times are ISO 8601 with an offset, for example 2026-10-16T09:00:00-05:00. Responses use UTC. Dates are YYYY-MM-DD, read in the calendar's own timezone unless an endpoint says otherwise.
Errors
| Status | Meaning |
|---|---|
401 |
The token is missing, wrong, revoked or expired. |
403 |
The token is valid but is not allowed to do this: a missing scope, a missing permission, or API access turned off for the role. |
404 |
The thing does not exist, or belongs to another company. |
422 |
The request was understood but something in it is not valid. The errors object lists each field. |
429 |
Too many requests. Wait and try again. |
{
"message": "The title field is required.",
"errors": { "title": ["Give the activity a title."] }
}
Rate limits
Each token may make 60 requests a minute. Over the limit you get a 429 with a Retry-After header.
History
Your history, meaning what changed and who changed it, is readable for the last 90 days. See History.