Digital Agency Tools Docs

Quickstart

Create a key, make a request, read the envelope, then create something. Five minutes.

1. Create a key

  1. Sign in and open Settings → Developers (/settings/developers).
  2. Choose Create key, give it a name you will recognise later (“Zapier”, “Reporting script”), and pick the narrowest scope that does the job.
  3. Copy the key. It is shown once: only a hash is stored, so if you lose it, revoke it and create another.
Treat a key like a password. Keep it in an environment variable or a secrets manager, never in front-end code or a public repository.

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" }
}
Next: the errors guide lists every type, and the endpoint reference lists every endpoint.