Members
`/members` - read-only
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: members:read.
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.
page?integer1-based. meta.totalPages says how many there are.
1 <= value1per_page?integerRows per page. A value above 200 returns 400 - never a silent clamp.
1 <= value <= 20050sort?stringPrefix with - for descending. An undeclared sort returns 400.
"createdAt""createdAt""-createdAt""name""-name""role""-role"q?stringCase-insensitive "contains", across: name, email.
filter[role]?stringExact match on role.
The requested page.
application/json- response
data*array<>meta*curl -X GET 'https://api.usedashly.com/v1/members'{ "data": [ { "id": "string", "name": "string", "email": "string", "role": "string", "createdAt": "2019-08-24T14:15:22Z" } ], "meta": { "page": 0, "perPage": 0, "total": 0, "totalPages": 0 }}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: members:read.
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.
id*stringThe record's public id (hsbftmp3f5), as returned in the id field. An internal UUID returns 404.
Found.
application/json- response
data*curl -X GET 'https://api.usedashly.com/v1/members/string'{ "data": { "id": "string", "name": "string", "email": "string", "role": "string", "createdAt": "2019-08-24T14:15:22Z" }}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: members:read.
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 available verbs.
application/json- response
data*array<>curl -X GET 'https://api.usedashly.com/v1/members/actions'{ "data": [ { "name": "string", "label": "string", "description": "string", "target": "item", "readOnly": true, "path": "string", "input": {} } ]}Invites an e-mail address to join the agency, as member or owner. Refused once the plan's seats are used up - active members and pending invitations both count. The invitee gets the same e-mail as from the dashboard, and the invitation expires after 14 days.
Does what the dashboard's inviteMemberAction does - same implementation, so the two cannot diverge.
Required scope: members:write.
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.
Idempotency-Key?stringA 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.
8 <= length <= 255application/json- body
email*string^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$emaillength <= 200role?string"member""member""owner"Done.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/actions/invite' \ -H 'Content-Type: application/json' \ -d '{ "email": "user@example.com"}'{ "data": null}Removes this member from the agency. Their user account is kept; the API keys and connectors they created in this agency are revoked.
Does what the dashboard's removeMemberAction does - same implementation, so the two cannot diverge. Takes no body.
Required scope: members:write.
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.
id*stringThe public id of the record to act on. It is resolved inside your agency before the action runs, so an id from another tenant is a 404 and never reaches it.
Idempotency-Key?stringA 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.
8 <= length <= 255Done.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/string/actions/remove'{ "data": null}Cancels the pending invitations sent to this e-mail address to join the agency.
Does what the dashboard's cancelInvitationAction does - same implementation, so the two cannot diverge.
Required scope: members:write.
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.
Idempotency-Key?stringA 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.
8 <= length <= 255application/json- body
email*string^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$emaillength <= 200Done.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/actions/cancel-invitation' \ -H 'Content-Type: application/json' \ -d '{ "email": "user@example.com"}'{ "data": null}Sets this member's internal hourly cost in euros, used by project profitability. null clears it.
Does what the dashboard's setMemberRateAction does - same implementation, so the two cannot diverge.
Required scope: members:write.
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.
id*stringThe public id of the record to act on. It is resolved inside your agency before the action runs, so an id from another tenant is a 404 and never reaches it.
Idempotency-Key?stringA 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.
8 <= length <= 255application/json- body
costRateEuros*|nullDone.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/string/actions/set-cost-rate' \ -H 'Content-Type: application/json' \ -d '{ "costRateEuros": 0}'{ "data": null}Sets how many minutes this member works in a week (weeklyMinutes, 60 to 6000), the capacity the team workload widget sets their week's tickets against. null clears it: the member counts 40 h (2400).
Does what the dashboard's saveMemberWeeklyHoursAction does - same implementation, so the two cannot diverge.
Required scope: members:write.
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.
id*stringThe public id of the record to act on. It is resolved inside your agency before the action runs, so an id from another tenant is a 404 and never reaches it.
Idempotency-Key?stringA 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.
8 <= length <= 255application/json- body
weeklyMinutes*|nullDone.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/string/actions/set-weekly-hours' \ -H 'Content-Type: application/json' \ -d '{ "weeklyMinutes": 60}'{ "data": null}Creates a relation between this record and a target object (targetType plus the target's public targetId) in the relation graph. Linking the same pair twice does nothing.
Does what the dashboard's linkObjectAction does - same implementation, so the two cannot diverge.
Required scope: members:write.
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.
id*stringThe public id of the record to act on. It is resolved inside your agency before the action runs, so an id from another tenant is a 404 and never reaches it.
Idempotency-Key?stringA 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.
8 <= length <= 255application/json- body
targetType*string"account""contact""project""ticket""deal""user""proposal"targetId*string1 <= length <= 60Done.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/string/actions/link-object' \ -H 'Content-Type: application/json' \ -d '{ "targetType": "account", "targetId": "string"}'{ "data": null}Removes the relation between this record and the target object in the relation graph. Unlinking a pair that was never linked does nothing. A deal/project pair is unlinked like unlink-project on the deal: the change is audited, so the key must be attached to a user (403 with reason key_not_attached otherwise).
Does what the dashboard's unlinkObjectAction does - same implementation, so the two cannot diverge.
Required scope: members:write.
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.
id*stringThe public id of the record to act on. It is resolved inside your agency before the action runs, so an id from another tenant is a 404 and never reaches it.
Idempotency-Key?stringA 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.
8 <= length <= 255application/json- body
targetType*string"account""contact""project""ticket""deal""user""proposal"targetId*string1 <= length <= 60Done.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/string/actions/unlink-object' \ -H 'Content-Type: application/json' \ -d '{ "targetType": "account", "targetId": "string"}'{ "data": null}The day of the member who owns the key (for a connector: the member who authorized it), like the Today page: their overdue and due-today tickets (tickets:read), their activities of the day (activities:read), the pipeline's dormant deals (deals:read) and the minutes each member logged since Monday (time-logs:read). A section the key may not read is absent. Fails when the key has no owner.
Reads the same data as the in-app my_day - same implementation. Changes nothing; also answers GET with the same fields as query parameters. Takes no body.
Required scope: none - each section needs its own <resource>:read and is absent without it.
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 figures.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X GET 'https://api.usedashly.com/v1/members/actions/my-day'{ "data": null}The day of the member who owns the key (for a connector: the member who authorized it), like the Today page: their overdue and due-today tickets (tickets:read), their activities of the day (activities:read), the pipeline's dormant deals (deals:read) and the minutes each member logged since Monday (time-logs:read). A section the key may not read is absent. Fails when the key has no owner.
Reads the same data as the in-app my_day - same implementation. Changes nothing; also answers GET with the same fields as query parameters. Takes no body.
Required scope: none - each section needs its own <resource>:read and is absent without it.
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.
Idempotency-Key?stringA 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.
8 <= length <= 255Done.
application/json- response
data*unknownThe action's result; its shape depends on the verb.
curl -X POST 'https://api.usedashly.com/v1/members/actions/my-day'{ "data": null}