Quickstart
Create a key, make a request, read the envelope, then create something. Five minutes.
1. Create a key
- Sign in and open Settings → Developers
(
/settings/developers). - Choose Create key, give it a name you will recognise later (“Zapier”, “Reporting script”), and pick the narrowest scope that does the job.
- Copy the key. It is shown once: only a hash is stored, so if you lose it, revoke it and create another.
Key format
dak1.<8 hex id>.<40 hex secret>
Shell
export DA_API_KEY="dak1.3f9a01c2.…"
2. Check the key
Send it as a Bearer token. Every route lives under /v1.
/v1/me confirms the key works and shows the business it acts for.
Request
curl https://api.digitalagency.tools/v1/me \
-H "Authorization: Bearer $DA_API_KEY"
Response · 200
{
"data": {
"key": { "id": 3, "name": "Reporting script", "scope": "write" },
"business": {
"id": 12,
"name": "Brightside Studio",
"slug": "brightside",
"email": "hello@brightside.studio",
"currency": "EUR",
"timezone": "Europe/Dublin",
"booking_page_url": "https://app.digitalagency.tools/brightside"
}
},
"meta": { "request_id": "req_6f1c2a9e0b7d4c31" }
}
3. List something
List endpoints return an array in data and a
meta.pagination block. See
pagination & filtering.
Request
curl "https://api.digitalagency.tools/v1/contacts?type=client&per_page=2" \
-H "Authorization: Bearer $DA_API_KEY"
Response · 200
{
"data": [
{
"id": 481,
"name": "Aoife Byrne",
"company": "Byrne & Co",
"email": "aoife@byrne.co",
"type": "client",
"crm_status": "closed_won",
"created_at": "2026-10-02T09:14:00+00:00",
"updated_at": "2026-10-30T16:41:12+00:00",
…
},
{ "id": 476, "name": "Liam Walsh", … }
],
"meta": {
"request_id": "req_0b7d4c316f1c2a9e",
"pagination": {
"page": 1, "per_page": 2, "count": 2,
"total": 37, "total_pages": 19, "has_more": true
}
}
}
4. Create something
Writes need a write key. Send JSON, and add an
Idempotency-Key so a retry after a
network blip cannot create the contact twice.
A successful create answers 201 with the new resource, and
fires the contact.created webhook.
Request
curl -X POST https://api.digitalagency.tools/v1/contacts \
-H "Authorization: Bearer $DA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: signup-8841" \
-d '{"name":"Niamh Kelly","email":"niamh@example.com","type":"prospect"}'
Response · 201
{
"data": {
"id": 482,
"name": "Niamh Kelly",
"email": "niamh@example.com",
"type": "prospect",
"crm_status": null,
"created_at": "2026-11-05T10:02:33+00:00",
…
},
"meta": { "request_id": "req_9e0b7d4c316f1c2a" }
}
5. When it goes wrong
Every failure has the same shape: an error.type you can switch on,
a readable message, and the same request_id.
{
"error": { "type": "unauthorized", "message": "Invalid or revoked API key." },
"meta": { "request_id": "req_c316f1c2a9e0b7d4" }
}