Your agency's data, in your own systems

A REST API over clients, projects, tasks, time, invoices and reports. Keys belong to the account rather than to a person, each one scoped to exactly what it needs, and the whole thing is off until you switch it on.

Read the reference Start a 90-day trial

Included from Agency (£149/month). Unlocked for the whole trial.

The API settings screen in Marque: a switch to turn the customer API on, and a form for creating a key with read and write scopes per resource.
Settings → API. Off until you turn it on, and scoped per key.

Three decisions, and the rest follows

Keys belong to the agency

Not to whoever made them. An integration does not stop working because somebody left — but each key does name a user, acts as them, and stops the moment that account is deactivated.

Scopes are resource plus verb

clients:read, invoices:write. The level follows the HTTP method, so an endpoint cannot be read-only in the documentation and writable in practice. A key short of a scope gets a 403 naming the one it needs.

Nothing is on by default

The API is off until an admin turns it on, and switching it off stops every key at once. Revoking one key never disturbs the others.

What you can read and write

Full CRUD on each of these, paginated, filtered, and scoped to your account and nobody else's. There is no cross-account identifier to pass and no way to widen a key from outside.

Clients & contacts

clients:read · clients:write

Projects & milestones

projects:read · projects:write

Tasks

tasks:read · tasks:write

Time entries

time:read · time:write

Invoices & quotes

invoices:read · invoices:write

Expenses

expenses:read · expenses:write

Support tickets

tickets:read · tickets:write

Sites

sites:read · sites:write

Reports

reports:read

Working in about a minute

  1. 1 Turn the API on in Settings → API.
  2. 2 Create a key with only the scopes that integration needs. It is shown once.
  3. 3 Call /me to confirm what it can do, then get on with it.
# Every client we look after, 25 at a time
curl https://app.marquecrm.com/api/public/v1/clients \
  -H "Authorization: Bearer mq_live_..."

# Log an hour against a project
curl -X POST https://app.marquecrm.com/api/public/v1/time-entries \
  -H "Authorization: Bearer mq_live_..." \
  -H "Content-Type: application/json" \
  -d '{"client_id":12,"project_id":44,"duration_minutes":60,"billable":true}'

What you can rely on

Rate limits that tell you where you are

Per key, per minute, at your plan's ceiling — 600 a minute on Agency. Every response carries the limit and what is left; going over gets a 429 with Retry-After. One runaway integration cannot take your others down.

Errors that say what to do

Always JSON with a message worth reading. 401 the key is wrong or revoked, 402 the plan does not include the API, 403 it is switched off or the key lacks a scope, 422 validation with errors per field.

Your account, and only yours

Every query is scoped to the agency the key belongs to, at the database layer. There is no account identifier to pass and nothing to get wrong.

Versioned in the path

Fields get added to responses. Existing fields do not change meaning or disappear inside a version.

The full endpoint list, read straight off the running application, is in the API reference.

Build against it before you buy it

The API is unlocked for the whole 90-day trial, on the same keys and the same limits.

Start free trial