Dashly Docs

Agency settings

`/agency-settings` - read-only

List agency settings

GET
/agency-settings

One page of records, newest first unless you say otherwise, with the total count in meta so you know how far to paginate.

Required scope: agency-settings:read.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Query Parameters

page?integer

1-based. meta.totalPages says how many there are.

Range1 <= value
Default1
per_page?integer

Rows per page. A value above 200 returns 400 - never a silent clamp.

Range1 <= value <= 200
Default50
sort?string

Prefix with - for descending. An undeclared sort returns 400.

Default"-updatedAt"
Value in"updatedAt""-updatedAt"

Response Body

The requested page.

application/json
  1. response
data*array<>
meta*
Example Request
curl -X GET 'https://api.usedashly.com/v1/agency-settings'
Example Response
{  "data": [    {      "id": "string",      "timezone": "string",      "portalShowForfaitHours": true,      "reviewLinks": null,      "clientCreateFields": null,      "recordDeletionEnabled": true,      "npsTemplate": null,      "locale": "fr",      "updatedAt": "2019-08-24T14:15:22Z"    }  ],  "meta": {    "page": 0,    "perPage": 0,    "total": 0,    "totalPages": 0  }}
GET
/agency-settings/{id}

The full record, custom fields included when the resource carries them. A record from another agency is a 404, not a 403 - its existence is not ours to confirm.

Required scope: agency-settings:read.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Path Parameters

id*string

The record's public id (hsbftmp3f5), as returned in the id field. An internal UUID returns 404.

Response Body

Found.

application/json
  1. response
data*
Example Request
curl -X GET 'https://api.usedashly.com/v1/agency-settings/string'
Example Response
{  "data": {    "id": "string",    "timezone": "string",    "portalShowForfaitHours": true,    "reviewLinks": null,    "clientCreateFields": null,    "recordDeletionEnabled": true,    "npsTemplate": null,    "locale": "fr",    "updatedAt": "2019-08-24T14:15:22Z"  }}

List available actions

GET
/agency-settings/actions

Every verb this resource answers to, with its target and the JSON Schema of its body - the same contracts this document describes, readable at runtime.

Required scope: agency-settings:read.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Response Body

The available verbs.

application/json
  1. response
data*array<>
Example Request
curl -X GET 'https://api.usedashly.com/v1/agency-settings/actions'
Example Response
{  "data": [    {      "name": "string",      "label": "string",      "description": "string",      "target": "item",      "readOnly": true,      "path": "string",      "input": {}    }  ]}

Save the preferences

POST
/agency-settings/actions/save-settings

Writes the agency's operational preferences - IANA time zone, whether retainer hours show on the portal, review links - replacing the whole map.

Does what the dashboard's saveAgencySettingsAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
currency*string
Match^[A-Z]{3}$
timezone*string
portalShowForfaitHours*boolean
reviewLinks*array<>
Itemsitems <= 10

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/save-settings' \  -H 'Content-Type: application/json' \  -d '{  "currency": "string",  "timezone": "string",  "portalShowForfaitHours": true,  "reviewLinks": [    {      "label": "string",      "url": "http://example.com"    }  ]}'
Example Response
{  "data": null}

Client form fields

POST
/agency-settings/actions/save-client-create-fields

Chooses which built-in columns (sector, website, siren) the add-client form asks for. An empty list is valid; the name is always asked for.

Does what the dashboard's saveClientCreateFieldsAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
fields*array<>

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/save-client-create-fields' \  -H 'Content-Type: application/json' \  -d '{  "fields": [    "sector"  ]}'
Example Response
{  "data": null}

NPS request e-mail

POST
/agency-settings/actions/save-nps-template

Writes the agency's own NPS request e-mail - template: { subject, body }, plain text, with {{client}}, {{agence}} and {{lien}} substituted at send time - or template: null to go back to the product's copy in each reader's language.

Does what the dashboard's saveNpsTemplateAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
template*|null

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/save-nps-template' \  -H 'Content-Type: application/json' \  -d '{  "template": {    "subject": "string",    "body": "string"  }}'
Example Response
{  "data": null}

Agency language

POST
/agency-settings/actions/set-locale

Sets the agency's language (locale: fr or en) - the language of messages with no single reader: Slack notifications and the request button in the agency's channel, periodic reports (the document and its announcement), the weekly summary posted to Slack, invitations to people without an account (partner invitations use the partner's own agency language when it has one). Each person keeps their own language for what is addressed to them. changed is false when the agency already had that language (nothing is written or audited).

Does what the dashboard's saveAgencyLocaleAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
locale*string
Value in"fr""en"

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-locale' \  -H 'Content-Type: application/json' \  -d '{  "locale": "fr"}'
Example Response
{  "data": null}

Monthly revenue target

POST
/agency-settings/actions/set-revenue-target

Sets the revenue the agency aims to sign each month - cents: whole cents excluding tax, in the agency's currency, positive - or cents: null to remove it. Today's 'Monthly target' widget draws the deals won this month against it.

Does what the dashboard's setRevenueTargetAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
cents*|null

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-revenue-target' \  -H 'Content-Type: application/json' \  -d '{  "cents": 1}'
Example Response
{  "data": null}
POST
/agency-settings/actions/set-client-reminders

Turns the automatic client reminder on or off (enabled, off by default) and sets afterDays (1 to 30): a ticket assigned to its client side - a portal member or the organisation - that stays without any client action (a comment of theirs) for that many days is reminded to them, again at twice the delay. The reminder is a bell notification always, an e-mail only for a signed client. Before the feature's migration, 409 client_reminders_not_installed.

Does what the dashboard's saveClientRemindersAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
enabled*boolean
afterDays*integer
Range1 <= value <= 30

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-client-reminders' \  -H 'Content-Type: application/json' \  -d '{  "enabled": true,  "afterDays": 1}'
Example Response
{  "data": null}
POST
/agency-settings/actions/set-difficulty-durations

Sets what an unestimated ticket weighs in the team's week, in minutes, by difficulty: easy, medium, hard (each 5 to 4800, easy <= medium <= hard; defaults 60, 180, 480). A ticket's own estimateMinutes always wins; a ticket with neither weighs medium.

Does what the dashboard's saveDifficultyDurationsAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
easy*integer
Range5 <= value <= 4800
medium*integer
Range5 <= value <= 4800
hard*integer
Range5 <= value <= 4800

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-difficulty-durations' \  -H 'Content-Type: application/json' \  -d '{  "easy": 5,  "medium": 5,  "hard": 5}'
Example Response
{  "data": null}
GET
/agency-settings/actions/collection-schedules

The agency's default schedule for each kind of recurring collection (own is null when the agency never set one and the product default applies: weekly on Monday 06:00, crawls off) and the time zone its slots are in. Read-only.

Reads the same data as the in-app getAgencyPlanning - same implementation. Changes nothing; also answers GET with the same fields as query parameters.

Required scope: agency-settings:read.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Response Body

The figures.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X GET 'https://api.usedashly.com/v1/agency-settings/actions/collection-schedules'
Example Response
{  "data": null}
POST
/agency-settings/actions/collection-schedules

The agency's default schedule for each kind of recurring collection (own is null when the agency never set one and the product default applies: weekly on Monday 06:00, crawls off) and the time zone its slots are in. Read-only.

Reads the same data as the in-app getAgencyPlanning - same implementation. Changes nothing; also answers GET with the same fields as query parameters.

Required scope: agency-settings:read.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/collection-schedules' \  -H 'Content-Type: application/json' \  -d '{}'
Example Response
{  "data": null}
POST
/agency-settings/actions/set-collection-schedule

Sets when one kind of recurring collection runs for every client without an exception: kind (geo, rank or crawl), frequency (daily, weekly, monthly or off), weekday (1 = Monday … 7, read when weekly), monthDay (1-28, read when monthly) and slotHour (0, 6, 12 or 18, in the agency's time zone). A slot that is full spills into the next free one.

Does what the dashboard's saveAgencyCollectionScheduleAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
kind*string
Value in"geo""rank""crawl"
frequency*string
Value in"daily""weekly""monthly""off"
weekday?integer
Range1 <= value <= 7
Default1
monthDay?integer
Range1 <= value <= 28
Default1
slotHour*|

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-collection-schedule' \  -H 'Content-Type: application/json' \  -d '{  "kind": "geo",  "frequency": "daily",  "slotHour": 0}'
Example Response
{  "data": null}

Allow record deletion

POST
/agency-settings/actions/set-record-deletion

Turns deletion of CRM records - leads, organisations, people, deals - on or off for the whole agency. This is the switch every deletion checks before it acts.

Does what the dashboard's saveRecordDeletionAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
enabled*boolean

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-record-deletion' \  -H 'Content-Type: application/json' \  -d '{  "enabled": true}'
Example Response
{  "data": null}
POST
/agency-settings/actions/set-pattern-contribution

Turns the agency's contribution to Dashly's cross-agency SEO pattern library on (the default) or off. Only anonymised derived figures of its periodic reports are shared; off stops future contributions, past ones carry no agency id and cannot be removed individually.

Does what the dashboard's savePatternContributionAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
enabled*boolean

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-pattern-contribution' \  -H 'Content-Type: application/json' \  -d '{  "enabled": true}'
Example Response
{  "data": null}

Create an API key

POST
/agency-settings/actions/create-api-key

Creates an API key for the agency and returns its plaintext ONCE - only the hash is stored. scopes narrows what it may do; without it, the key has full access.

Does what the dashboard's createApiKeyAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
name*string
Length2 <= length <= 120
scopes?array<>
Items1 <= items <= 50

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/create-api-key' \  -H 'Content-Type: application/json' \  -d '{  "name": "string"}'
Example Response
{  "data": null}

Revoke an API key

POST
/agency-settings/actions/revoke-api-key

Permanently revokes the API key named by its display prefix. Revoking the key making the call is allowed, and takes effect immediately.

Does what the dashboard's revokeApiKeyAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
prefix*string
Length4 <= length <= 20

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/revoke-api-key' \  -H 'Content-Type: application/json' \  -d '{  "prefix": "string"}'
Example Response
{  "data": null}
POST
/agency-settings/actions/set-api-key-owner

Assigns the key named by its prefix to the given member (an id from GET /v1/members). From the next call on, the key's usage is charged to that member. A key always has an owner: detaching one would also detach it from the owner's personal cap.

Does what the dashboard's setApiKeyOwnerAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
prefix*string
Length4 <= length <= 20
ownerId*string
Length1 <= length <= 120

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-api-key-owner' \  -H 'Content-Type: application/json' \  -d '{  "prefix": "string",  "ownerId": "string"}'
Example Response
{  "data": null}

API usage

POST
/agency-settings/actions/get-api-usage

Returns the agency's token pool for the current cycle - allowance, spent, remaining, reset date - and how it breaks down per member. The same figures ride on every response in the X-Quota-* headers.

Does what the dashboard's getApiUsageAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/get-api-usage'
Example Response
{  "data": null}
POST
/agency-settings/actions/resync-api-quota

Recomputes the monthly pool from the plan and the seat count, and applies it. Reserved to platform administrators (a key acting for anyone else is refused with platform_admin_required): it would undo a pool support set by hand. The caller supplies no number, so the resulting allowance never exceeds what the plan grants.

Does what the dashboard's resyncApiQuotaAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/resync-api-quota'
Example Response
{  "data": null}

Register a webhook

POST
/agency-settings/actions/create-webhook

Registers a public HTTPS URL that will receive every event of the domain as a signed POST, and returns its signing secret ONCE.

Does what the dashboard's createWebhookAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
url*string
Formaturi
Lengthlength <= 2000

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/create-webhook' \  -H 'Content-Type: application/json' \  -d '{  "url": "http://example.com"}'
Example Response
{  "data": null}

Delete a webhook

POST
/agency-settings/actions/delete-webhook

Deletes the webhook or webhooks registered for the exact URL given. Deliveries stop immediately.

Does what the dashboard's deleteWebhookAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
url*string
Formaturi
Lengthlength <= 2000

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/delete-webhook' \  -H 'Content-Type: application/json' \  -d '{  "url": "http://example.com"}'
Example Response
{  "data": null}

Change a role permission

POST
/agency-settings/actions/toggle-role-permission

Grants or removes a permission (module.action, e.g. tickets.delete) on the role named by its key. The Owner role is never editable.

Does what the dashboard's toggleRolePermissionAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
roleKey*string
Length1 <= length <= 60
permissionKey*string
enabled*boolean

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/toggle-role-permission' \  -H 'Content-Type: application/json' \  -d '{  "roleKey": "string",  "permissionKey": "string",  "enabled": true}'
Example Response
{  "data": null}

Restore a role's preset

POST
/agency-settings/actions/reset-role-to-preset

Resets a system role's permissions (member, partner, client_admin, client_member) to their original preset, discarding the agency's adjustments.

Does what the dashboard's resetRoleToPresetAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
roleKey*string
Length1 <= length <= 60

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/reset-role-to-preset' \  -H 'Content-Type: application/json' \  -d '{  "roleKey": "string"}'
Example Response
{  "data": null}

Save a connector key

POST
/agency-settings/actions/save-connector-key

Saves or replaces a marketplace connector's API key at agency level (ahrefs, semrush, fathom_analytics, pennylane, bing_webmaster, tiktok_ads). The key is encrypted and never readable again. Requires a plan with connectors (Pro and above, trials included; pennylane needs Scale).

Does what the dashboard's saveConnectorKeyAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
connectorId*string
Value in"ahrefs""semrush""fathom_analytics""pennylane""bing_webmaster""tiktok_ads"
apiKey*string
Length10 <= length <= 500

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/save-connector-key' \  -H 'Content-Type: application/json' \  -d '{  "connectorId": "ahrefs",  "apiKey": "stringstri"}'
Example Response
{  "data": null}

Disconnect a connector

POST
/agency-settings/actions/disconnect-connector

Deletes the agency-level credentials of a marketplace connector (ahrefs, semrush, fathom_analytics, webflow, pennylane, bing_webmaster, tiktok_ads, meta_ads, linkedin_ads). Per-client connections and the capture history are kept.

Does what the dashboard's disconnectConnectorAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
connectorId*string
Value in"ahrefs""semrush""fathom_analytics""webflow""pennylane""bing_webmaster""tiktok_ads""meta_ads""linkedin_ads"

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-connector' \  -H 'Content-Type: application/json' \  -d '{  "connectorId": "ahrefs"}'
Example Response
{  "data": null}

Disconnect Google Ads

POST
/agency-settings/actions/disconnect-google-ads

Revokes the agency's Google Ads OAuth consent - the refresh token is revoked at Google, then deleted. Per-client connections and history are kept.

Does what the dashboard's disconnectGoogleAdsAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-google-ads'
Example Response
{  "data": null}
POST
/agency-settings/actions/disconnect-google-analytics

Revokes the agency's Google Analytics / Search Console OAuth consent - the refresh token is revoked at Google, then deleted. Per-client connections and history are kept.

Does what the dashboard's disconnectGoogleAnalyticsAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-google-analytics'
Example Response
{  "data": null}
POST
/agency-settings/actions/disconnect-google-business

Revokes the agency's Google Business Profile OAuth consent - its own consent, so revoking it leaves Analytics, Ads and YouTube untouched. Per-client connections and history are kept.

Does what the dashboard's disconnectGoogleBusinessAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-google-business'
Example Response
{  "data": null}

Disconnect YouTube

POST
/agency-settings/actions/disconnect-google-youtube

Revokes the agency's YouTube Analytics OAuth consent - its own consent, so revoking it leaves the other Google connections untouched. Per-client connections and history are kept.

Does what the dashboard's disconnectGoogleYoutubeAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-google-youtube'
Example Response
{  "data": null}

Disconnect Google Drive

POST
/agency-settings/actions/disconnect-google-drive

Removes the agency's Google Drive connection, destroying the stored OAuth tokens. Folders already linked to clients stay in the database but cannot be read until Drive is reconnected.

Does what the dashboard's disconnectDriveAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-google-drive'
Example Response
{  "data": null}
POST
/agency-settings/actions/disconnect-google-calendar

Removes the agency's Google Calendar connection, destroying the stored OAuth tokens, and empties the cached calendar. The events themselves stay at Google.

Does what the dashboard's disconnectGoogleCalendarAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-google-calendar'
Example Response
{  "data": null}

Disconnect GitHub

POST
/agency-settings/actions/disconnect-github

Deletes the agency's GitHub webhook secret. Events GitHub sends are refused from then on, having no verifiable signature - the webhook should be removed on the repository side too.

Does what the dashboard's disconnectGithubAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-github'
Example Response
{  "data": null}
POST
/agency-settings/actions/disconnect-github-app

Forgets the agency's GitHub App installation (Dashly ticket e3gb94xvys): private repositories are no longer read. The App stays installed on GitHub until it is uninstalled there. Connecting goes through GitHub's consent in the browser (Settings › Connections).

Does what the dashboard's disconnectGithubAppAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-github-app'
Example Response
{  "data": null}
POST
/agency-settings/actions/generate-github-secret

Mints or rotates the agency's GitHub webhook secret and returns it in plaintext ONCE, to paste into the GitHub webhook settings. The previous secret is invalidated immediately.

Does what the dashboard's generateGithubSecretAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/generate-github-secret'
Example Response
{  "data": null}
POST
/agency-settings/actions/disconnect-legacy-fathom

Removes the agency's legacy Fathom connection, from before per-member connections: the webhook is withdrawn at Fathom first, then the stored credentials are destroyed. Members' personal connections and already-imported notes are kept.

Does what the dashboard's disconnectLegacyFathomAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-legacy-fathom'
Example Response
{  "data": null}
POST
/agency-settings/actions/sync-fathom

Re-reads the last 30 days of meeting notes from Fathom for every connection of the agency and attaches them to clients. Idempotent - an already-imported note is updated, never duplicated - and capped at 10 pages per connection, but it calls Fathom once per connection: use it to catch up on a missed webhook, not as a sync loop.

Does what the dashboard's syncFathomAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/sync-fathom'
Example Response
{  "data": null}
POST
/agency-settings/actions/refresh-connect-status

Re-reads the agency's Connect account at Stripe, records its capabilities - charges, payouts, details submitted - and returns them. Idempotent and free of side effects at Stripe, but the account.updated webhook already keeps this status current: use it to catch up, not as a polling loop.

Does what the dashboard's refreshConnectStatusAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/refresh-connect-status'
Example Response
{  "data": null}
POST
/agency-settings/actions/disconnect-slack

Removes the link between the agency and its Slack workspace, along with the bot token stored there. Slack commands and notifications stop immediately, and reconnecting requires fresh OAuth consent.

Does what the dashboard's disconnectSlackAction does - same implementation, so the two cannot diverge. Takes no body.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/disconnect-slack'
Example Response
{  "data": null}
POST
/agency-settings/actions/post-slack-request-button

Posts the message carrying the "New request" button into a Slack channel - the only way a client reaches Dashly from a shared channel, since slash commands do not cross Slack Connect.

Does what the dashboard's postRequestButtonAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
channel*string
Lengthlength <= 120

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/post-slack-request-button' \  -H 'Content-Type: application/json' \  -d '{  "channel": "string"}'
Example Response
{  "data": null}
POST
/agency-settings/actions/set-slack-notify-channel

Sets the Slack channel the agency's notifications go to, after checking the bot can post there. An empty value clears the setting. This channel is shared by the whole agency and every ticket names its client in it, so pointing it at a channel shared with one client would show them the others.

Does what the dashboard's setNotifyChannelAction does - same implementation, so the two cannot diverge.

Required scope: agency-settings:write.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
channel*string
Lengthlength <= 120

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/set-slack-notify-channel' \  -H 'Content-Type: application/json' \  -d '{  "channel": "string"}'
Example Response
{  "data": null}

Agency overview

GET
/agency-settings/actions/overview

The agency dashboard's key figures for the current month (default) or quarter: active clients and new ones (clients:read), open tickets and tickets created per week over 12 weeks (tickets:read), minutes logged this week and per week (time-logs:read), monthly forfait consumption per client, most consumed first (forfaits:read). A section the key may not read is absent.

Reads the same data as the in-app workspace_overview - same implementation. Changes nothing; also answers GET with the same fields as query parameters.

Required scope: none - each section needs its own <resource>:read and is absent without it.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Query Parameters

period?string
Value in"month""quarter"

Response Body

The figures.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X GET 'https://api.usedashly.com/v1/agency-settings/actions/overview'
Example Response
{  "data": null}

Agency overview

POST
/agency-settings/actions/overview

The agency dashboard's key figures for the current month (default) or quarter: active clients and new ones (clients:read), open tickets and tickets created per week over 12 weeks (tickets:read), minutes logged this week and per week (time-logs:read), monthly forfait consumption per client, most consumed first (forfaits:read). A section the key may not read is absent.

Reads the same data as the in-app workspace_overview - same implementation. Changes nothing; also answers GET with the same fields as query parameters.

Required scope: none - each section needs its own <resource>:read and is absent without it.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Your agency's API key: Authorization: Bearer ak_…. Created in Connectors → API & webhooks and shown once. A key authenticates an agency, not a person.

Header Parameters

Idempotency-Key?string

A value you choose (a UUID is the usual one), 8 to 255 characters of A-Z a-z 0-9 _ . : -. Retrying with the same key returns the first call's answer instead of creating a second record, for seven days. The same key with a different body returns 409.

Length8 <= length <= 255

Request Body

application/json
  1. body
period?string
Value in"month""quarter"

Response Body

Done.

application/json
  1. response
data*unknown

The action's result; its shape depends on the verb.

Example Request
curl -X POST 'https://api.usedashly.com/v1/agency-settings/actions/overview' \  -H 'Content-Type: application/json' \  -d '{}'
Example Response
{  "data": null}