Dashly Docs

Ticket automations

`/ticket-automations` - read-only

List ticket automations

GET
/ticket-automations

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: ticket-automations: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"position"
Value in"position""-position""createdAt""-createdAt""name""-name"
q?string

Case-insensitive "contains", across: name.

filter[trigger]?string

Exact match on trigger.

filter[active]?string

Exact match on active.

Value in"true""false"

Response Body

The requested page.

application/json
  1. response
data*array<>
meta*
Example Request
curl -X GET 'https://api.usedashly.com/v1/ticket-automations'
Example Response
{  "data": [    {      "id": "string",      "name": "string",      "active": true,      "trigger": "string",      "position": 0,      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    }  ],  "meta": {    "page": 0,    "perPage": 0,    "total": 0,    "totalPages": 0  }}
GET
/ticket-automations/{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: ticket-automations: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/ticket-automations/string'
Example Response
{  "data": {    "id": "string",    "name": "string",    "active": true,    "trigger": "string",    "position": 0,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}

List available actions

GET
/ticket-automations/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: ticket-automations: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/ticket-automations/actions'
Example Response
{  "data": [    {      "name": "string",      "label": "string",      "description": "string",      "target": "item",      "readOnly": true,      "path": "string",      "input": {}    }  ]}
POST
/ticket-automations/actions/create

Creates a "when X then Y" rule on tickets: a trigger, conditions (category values by public id) and actions (category and template by public id). 50 rules maximum per agency.

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

Required scope: ticket-automations: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
Length1 <= length <= 80
trigger*string
Value in"ticket.created""ticket.status_changed""ticket.assigned""ticket.priority_changed""ticket.comment_added""ticket.custom_field_changed""ticket.due_date_passed""github.pr_merged"
conditions?array<|>
Itemsitems <= 10
Default[]
actions*array<|||||||>
Items1 <= items <= 5
active?boolean
Defaulttrue

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/ticket-automations/actions/create' \  -H 'Content-Type: application/json' \  -d '{  "name": "string",  "trigger": "ticket.created",  "actions": [    {      "type": "set_status",      "status": "string"    }  ]}'
Example Response
{  "data": null}
POST
/ticket-automations/{id}/actions/update

Replaces the rule wholesale - name, trigger, conditions, actions, enabled state. The same contract as creation, exactly as in the dashboard.

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

Required scope: ticket-automations: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.

Path Parameters

id*string

The 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.

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
Length1 <= length <= 80
trigger*string
Value in"ticket.created""ticket.status_changed""ticket.assigned""ticket.priority_changed""ticket.comment_added""ticket.custom_field_changed""ticket.due_date_passed""github.pr_merged"
conditions?array<|>
Itemsitems <= 10
Default[]
actions*array<|||||||>
Items1 <= items <= 5
active?boolean
Defaulttrue

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/ticket-automations/string/actions/update' \  -H 'Content-Type: application/json' \  -d '{  "name": "string",  "trigger": "ticket.created",  "actions": [    {      "type": "set_status",      "status": "string"    }  ]}'
Example Response
{  "data": null}

Enable or pause the rule

POST
/ticket-automations/{id}/actions/toggle

Enables (active: true) or pauses (active: false) the rule without otherwise changing it.

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

Required scope: ticket-automations: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.

Path Parameters

id*string

The 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.

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
active*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/ticket-automations/string/actions/toggle' \  -H 'Content-Type: application/json' \  -d '{  "active": true}'
Example Response
{  "data": null}

Delete the rule

POST
/ticket-automations/{id}/actions/delete

Permanently deletes the rule and its run log. The collection is read-only, so deletion goes through this verb.

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

Required scope: ticket-automations: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.

Path Parameters

id*string

The 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.

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/ticket-automations/string/actions/delete'
Example Response
{  "data": null}

Create a blank rule

POST
/ticket-automations/actions/create-draft

Creates an inactive rule called "Nouvelle règle", triggered when a ticket is created and setting the first column of the agency's workflow. Returns its id so you can configure it next. 50 rules maximum per agency.

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

Required scope: ticket-automations: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/ticket-automations/actions/create-draft'
Example Response
{  "data": null}

Set a rule's tags

POST
/ticket-automations/{id}/actions/set-tags

Replaces the rule's tags with exactly this list (ids from /v1/automation-tags). An empty list removes them all.

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

Required scope: ticket-automations: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.

Path Parameters

id*string

The 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.

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
tagIds*array<>
Itemsitems <= 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/ticket-automations/string/actions/set-tags' \  -H 'Content-Type: application/json' \  -d '{  "tagIds": [    "string"  ]}'
Example Response
{  "data": null}