Getting started
Discovery, key introspection, the field registry, and this document.
The live catalog: every collection, the fields it returns, the fields you may write, what can be filtered, sorted and searched, and the scopes each one needs. An integration can be built from this response plus /fields without reading a line of prose.
Required scope: any valid key.
bearerAuthAuthorizationBearer <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.
The catalog.
application/json- response
data*curl -X GET 'https://api.usedashly.com/v1'{ "data": { "version": "string", "resources": [ { "name": "string", "label": "string", "path": "string", "methods": [ "string" ], "attributes": [ "string" ], "writable": [ "string" ], "relations": [ "string" ], "filterable": [ "string" ], "actions": [ "string" ], "sortable": [ "string" ], "searchable": [ "string" ], "customFields": "string", "scopes": [ "string" ] } ] }}Start here. It validates the key, names the agency it belongs to and lists its scopes, without touching any data. The token allowance is in the body as well as in the headers, because this is the call a client library makes at startup - and one that had to issue a throwaway request just to read a header would issue one.
Required scope: any valid key.
bearerAuthAuthorizationBearer <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.
The agency, the scopes, the allowance.
application/json- response
data*curl -X GET 'https://api.usedashly.com/v1/me'{ "data": { "agency": { "name": "string", "slug": "string" }, "scopes": [ "string" ], "quota": { "used": 0, "limit": 0, "remaining": 0, "unlimited": true, "resetsAt": "string" } }}What makes the rest usable. Every agency configures its own fields on clients, deals, leads and tickets; an integration cannot guess them, so it reads them. For each entity you get the built-in fields and this agency's custom ones in one list, with the key to use, the type it holds, whether it is required, and the choices a select accepts.
Required scope: any valid key.
bearerAuthAuthorizationBearer <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.
entity?stringNarrow to one entity. Omit it for all four.
"ticket""deal""account""lead""contact"The registry, keyed by entity.
application/json- response
data*curl -X GET 'https://api.usedashly.com/v1/fields'{ "data": { "property1": [ { "id": "string", "key": "string", "label": "string", "type": "string", "required": true, "source": "builtin", "deletable": true, "options": [ {} ], "location": "attribute" } ], "property2": [ { "id": "string", "key": "string", "label": "string", "type": "string", "required": true, "source": "builtin", "deletable": true, "options": [ {} ], "location": "attribute" } ] }}The OpenAPI 3.1 description of this API, generated from the catalog on every call - so it cannot drift from what the API actually does. Point Postman, Insomnia, Bruno or an SDK generator straight at this URL.
The one route that needs no key, and the one response with no data envelope: a tool reading a spec expects the document at the root.
No key required.
The OpenAPI document, at the root of the body.
application/json- response
An OpenAPI 3.1 document.
curl -X GET 'https://api.usedashly.com/v1/openapi.json'{}