mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
* items semi complete
* updated items page to use snippet toggler and migrated endpoint docs to use it
* updated files page to use snippet toggler and migrated REST and GraphQL endpoint docs to it
* updated activity page to use snippet toggler and migrated REST and GraphQL endpoint doc to it
* updated collections page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* updated dashboards page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated extensions page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated fields page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated flows page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated folders page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated notifications page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated operations page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated panels page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated permissions page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated presets page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated relations page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated revisions page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated roles page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Made headlines consistant with the rest of the doc pages
* Updated server page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated settings page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated shares page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated translations page to use snippet togglers and migrated REST endpoint docs to them
* Updated users page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated utilities page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated webhooks page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated authentication page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated Global Parameters page to use snippet togglers where there are adjacent REST and GraphQL Examples
* Added SDK code snippets to items page and made generic variables consistant
* Added SDK code snippets to files page and made generic variables consistant
* Few lang changes for files page
* Added SDK code snippets to activity page and made generic variables consistant
* Added SDK code snippets to collections page and made generic variables consistant
* Added SDK code snippets to dashboards page and made generic variables consistant
* removed query word from query parameter objects
* Added SDK code snippets to fields page and made generic variables consistant
* SnippetToggler border
* Used dynamic border color for snippettoggler heading
* Spacing top and bottom of snippet toggler in docs
* Removed extra HRs
* Remove manual TOC in query reference
* Small code styling change in items page
* Updated users page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* dashboards fixed up property names
* Small copy update on extensions page
* Updated keys in delete mult notifications REST
* Updated keys in operations
* Update keys in panel delete many
* Update keys in permissions
* Added quotes around generic example ID strings
* Added code formatting to final example in share public info
* Format files
* Refined sidebar
* Insert newline before ending template tags
* Fixed extra closing tags, causing an error, un users ref
* Text Formatting Users
* Put GQL related notes inside toggler
* Added SDK code snippets to flows page and made generic variables consistant
* Added SDK code snippets to folder page and made generic variables consistant
* fixing whitepsace for flows and folders page
* Consistent newlines in SnippetToggler usages
* Run prettier
* Fix 'alwaysDark' definition
* Home page snippet toggler style fixes
* Fix snippet toggler lang hover color in light mode
* Introduce different code theme for light mode
* Added SDK code snippets to notifications page and made generic variables consistant
* Switch to 'material-theme-lighter'
* Format file
* Fix tip
* Fix tip in sdk ref
* Consistent spacing for custom containers
* Added SDK code snippets to operations page and made generic variables consistant
* Lint & format code blocks
* Lint & format operations
* Added SDK code snippets to panels page and made generic variables consistant
* Added SDK code snippets to permissions page and made generic variables consistant
* Added SDK code snippets to presets page and made generic variables consistant
* Added SDK code snippets to relations page and made generic variables consistant
* Added SDK code snippets to revisions page and made generic variables consistant
* Added SDK code snippets to roles page and made generic variables consistant
* Added SDK code snippets to server page and made generic variables consistant
* Added SDK code snippets to settings page and made generic variables consistant
* app_url -> directus_project_url
* Omitted auth details in delete multiple files
* Added quotes to values in roles
* Upload a file snippets
* Pluralization for upload/import files
* More files functions typos
* Added SDK code snippets to shares page (still missing createShare(s) as endpoint not functioning currently) and made generic variables consistant
* Added SDK code snippets to translations page (missing delete endponts because not working) and made generic variables consistant
* Added SDK code snippets to users page and made generic variables consistant
* Added SDK code snippets to webhooks page and made generic variables consistant
* Added SDK code snippets to utilites page (except cleaning cache, will be tested and added in later commit) and made generic variables consistant
* Added SDK code snippets to auth page (not login, refresh, and logout though due to errors)
* Added SDK code snippets for utilsExport and clearCache
* added github username be7DOTis to contributors
* Omit auth commands in updateComment
* utilsImport
* rename app_url generic value
* changed instances of updated*operation* to update*Operation*
* missed some 'updated' changse
* Added SDK Snippets to Query Parameters page
* Add section on file security
* added create(s)Shares SDK snippet to shares page
* added console.log to create snippets
* Added delete(s)Webhook SDK snippet to webhooks page
* Added SDK snippets to extensions page
* Added create/updateSingleton section to items page
* Links in files security
* Added SDK Snippets to Schema page
* Added GQL Generic examples to snippet togglers and removed snippet toggler from Login Using SSO Providers
* Added create(s)Presets SDK Snippets to presets page
* replaced fields query in generics snippets for a more generic
* replaced fields query in generics snippets for a more generic
* Use storage value only if valid choice
* Sync snippet togglers across page
* Update docs/reference/system/activity.md
* Update docs/reference/system/activity.md
* Update docs/reference/system/extensions.md
* Update docs/reference/system/revisions.md
* Update docs/reference/system/settings.md
* Update docs/reference/system/revisions.md
* Update docs/reference/system/settings.md
* Update docs/reference/system/activity.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/schema.md
* Update docs/reference/system/server.md
* Update docs/reference/system/shares.md
* Replace all directus_project_url placeholders
* Revert "Sync snippet togglers across page"
This reverts commit 8b36f0d778.
* Update docs/reference/system/shares.md
* Update docs/reference/system/webhooks.md
* Clarify singleton section
* Consistent newlines between SnippetToggler templates
* Format files
* Remove console.log(result) statements from snippet
* Add examples for shares & users
Co-authored-by: Brainslug <tim@brainslug.nl>
* Fix hash GraphQL example
* Clarify update singleton section
* Add auth examples
Co-authored-by: Brainslug <tim@brainslug.nl>
* Final run on consistent newlines between SnippetToggler
* Switch to github themes
* The "Last One"
Co-authored-by: Brainslug <tim@brainslug.nl>
* The "Big One"
* Fix dead links
---------
Co-authored-by: Bevis Halsey-Perry <hi@be7.is>
Co-authored-by: Kevin Lewis <kvn@lws.io>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
1018 lines
17 KiB
Markdown
1018 lines
17 KiB
Markdown
---
|
|
description: REST and GraphQL API documentation on the Flows collection in Directus.
|
|
readTime: 5 min read
|
|
pageClass: page-reference
|
|
---
|
|
|
|
# Flows
|
|
|
|
> Flows enable custom, event-driven data processing and task automation within Directus.
|
|
|
|
## The Flow Object
|
|
|
|
`id` **uuid**\
|
|
Primary key of the flow.
|
|
|
|
`name` **string**\
|
|
Name for the flow.
|
|
|
|
`icon` **string**\
|
|
Icon displayed in the Admin App for the flow.
|
|
|
|
`color` **string**\
|
|
Color of the icon displayed in the Admin App for the flow.
|
|
|
|
`note` **text**\
|
|
Short description displayed in the Admin App.
|
|
|
|
`status` **string**\
|
|
Current status of the flow. One of `active`, `inactive`. Defaults to `active` when not specified.
|
|
|
|
`trigger` **string**\
|
|
Type of trigger for the flow. One of `hook`, `webhook`, `operation`, `schedule`, `manual`.
|
|
|
|
`options` **json**\
|
|
Options of the selected trigger for the flow.
|
|
|
|
`accountability` **string**\
|
|
The permission used during the flow. One of `$public`, `$trigger`, `$full`, or UUID of a role.
|
|
|
|
`date_created` **timestamp**\
|
|
Timestamp in ISO8601 when the flow was created.
|
|
|
|
`user_created` **many-to-one**\
|
|
The user who created the flow. Many-to-one to [users](/reference/system/users#the-users-object).
|
|
|
|
`operation` **string**\
|
|
UUID of the operation connected to the trigger in the flow.
|
|
|
|
```json
|
|
{
|
|
"id": "2fab3b9d-0543-4b87-8a30-3c5ee66fedf1",
|
|
"name": "My Flow",
|
|
"icon": "bolt",
|
|
"color": "#112233",
|
|
"note": "Note for my flow",
|
|
"status": "active",
|
|
"trigger": "manual",
|
|
"accountability": "$trigger",
|
|
"date_created": "2022-05-11T13:14:52Z",
|
|
"user_created": "12e62fd0-29c7-4fd3-b3d3-c7a39933e8af",
|
|
"operation": "92e82998-e421-412f-a513-13701e83e4ce"
|
|
}
|
|
```
|
|
|
|
## List Flows
|
|
|
|
List all flows that exist in Directus.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`GET /flows`
|
|
|
|
`SEARCH /flows`
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Query {
|
|
flows: [directus_flows]
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, readFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(readFlows(query));
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
[Learn more about SEARCH ->](/reference/introduction#search-http-method)
|
|
|
|
#### Query Parameters
|
|
|
|
Supports all [global query parameters](/reference/query).
|
|
|
|
### Response
|
|
|
|
An array of up to [limit](/reference/query#limit) [flow objects](#the-flow-object). If no items are available, data will
|
|
be an empty array.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`GET /flows`
|
|
|
|
`SEARCH /flows`
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
query {
|
|
flows {
|
|
id
|
|
name
|
|
status
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, readFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
readFlows({
|
|
fields: ['*'],
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Retrieve a flow
|
|
|
|
List an existing flow by primary key.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`GET /flows/:id`
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Query {
|
|
flows_by_id(id: ID!): directus_flows
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, readFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(readFlow('flow_id', query));
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Query Parameters
|
|
|
|
Supports all [global query parameters](/reference/query).
|
|
|
|
### Response
|
|
|
|
Returns the requested [flow object](#the-flow-object).
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`GET /flows/2fc325fb-299b-4d20-a9e7-a34349dee8b2`
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
query {
|
|
flows_by_id(id: "2fc325fb-299b-4d20-a9e7-a34349dee8b2") {
|
|
id
|
|
name
|
|
status
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, readFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
readFlow('4c01419e-0797-4f43-b95e-cbaebd2ac118', {
|
|
fields: ['*'],
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Create a Flow
|
|
|
|
Create a new flow.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`POST /flows`
|
|
|
|
```json
|
|
{
|
|
"flow_object_field_1": "value_1",
|
|
"flow_object_field_2": "value_2",
|
|
"flow_object_field_3": "value_3"
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Mutation {
|
|
create_flows_item(data: create_directus_flows_input!): directus_flows
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, createFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
createFlow({
|
|
flow_field_1: 'value_1',
|
|
flow_field_2: 'value_2',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Query Parameters
|
|
|
|
Supports all [global query parameters](/reference/query).
|
|
|
|
#### Request Body
|
|
|
|
A partial [flow object](#the-flow-object).
|
|
|
|
### Response
|
|
|
|
Returns the [flow object](#the-flow-object) for the created flow.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`POST /flows`
|
|
|
|
```json
|
|
{
|
|
"name": "My Flow",
|
|
"status": "active",
|
|
"trigger": "manual"
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
mutation {
|
|
create_flows_item(data: { name: "My Flow", status: "active", trigger: "manual" }) {
|
|
id
|
|
name
|
|
status
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, createFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
createFlow({
|
|
name: 'Email on article published',
|
|
trigger: 'operation',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Create Multiple Flows
|
|
|
|
Create multiple new flows.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`POST /flows`
|
|
|
|
```json
|
|
[
|
|
{
|
|
"flow_1_field_1": "value_1",
|
|
"flow_1_field_2": "value_2",
|
|
"flow_1_field_3": "value_3"
|
|
},
|
|
{
|
|
"flow_2_field_1": "value_4",
|
|
"flow_2_field_2": "value_5",
|
|
"flow_2_field_3": "value_6"
|
|
}
|
|
]
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Mutation {
|
|
create_flows_items(data: [create_directus_flows_input!]!): [directus_flows]
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, createFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
createFlows([
|
|
{
|
|
flow_1_field_1: 'value_1',
|
|
flow_1_field_2: 'value_2',
|
|
},
|
|
{
|
|
flow_2_field_1: 'value_3',
|
|
flow_2_field_2: 'value_4',
|
|
},
|
|
])
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Query Parameters
|
|
|
|
Supports all [global query parameters](/reference/query).
|
|
|
|
#### Request Body
|
|
|
|
An array of partial [flow objects](#the-flow-object).
|
|
|
|
### Response
|
|
|
|
Returns the [flow object](#the-flow-object) for the created flow.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`POST /flows`
|
|
|
|
```json
|
|
[
|
|
{
|
|
"name": "My Flow",
|
|
"status": "active",
|
|
"trigger": "manual"
|
|
},
|
|
{
|
|
"name": "Another Flow",
|
|
"status": "active",
|
|
"trigger": "webhook"
|
|
}
|
|
]
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
mutation {
|
|
create_flows_items(
|
|
data: [
|
|
{ name: "My Flow", status: "active", trigger: "manual" }
|
|
{ name: "Another Flow", status: "active", trigger: "webhook" }
|
|
]
|
|
) {
|
|
id
|
|
name
|
|
status
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, createFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
createFlows([
|
|
{
|
|
name: 'Email on article published',
|
|
trigger: 'operation',
|
|
},
|
|
{
|
|
name: 'Archive articles after 12 months',
|
|
trigger: 'schedule',
|
|
},
|
|
])
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Update a Flow
|
|
|
|
Update an existing flow.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`PATCH /flows/:id`
|
|
|
|
```json
|
|
{
|
|
"flow_object_field": "value_1"
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Mutation {
|
|
update_flows_item(id: ID!, data: update_directus_flows_input): directus_flows
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, updateFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
updateFlow('flow_id', {
|
|
flow_field: 'value',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Query Parameters
|
|
|
|
Supports all [global query parameters](/reference/query).
|
|
|
|
#### Request Body
|
|
|
|
A partial [flow object](#the-flow-object).
|
|
|
|
### Response
|
|
|
|
Returns the [flow object](#the-flow-object) for the updated flow.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`PATCH /flows/2fc325fb-299b-4d20-a9e7-a34349dee8b2`
|
|
|
|
```json
|
|
{
|
|
"name": "My Updated Flow"
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
mutation {
|
|
update_flows_item(id: "2fc325fb-299b-4d20-a9e7-a34349dee8b2", data: { name: "My Updated Flow" }) {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, updateFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
updateFlow('53e623bd-cbeb-405d-8201-158af7e3ac83', {
|
|
status: 'inactive',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Update Multiple Flows
|
|
|
|
Update multiple existing flows.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`PATCH /flows`
|
|
|
|
```json
|
|
{
|
|
"keys": ["flow_1_key", "flow_2_key"],
|
|
"data": {
|
|
"flow_object_field": "value_1"
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Mutation {
|
|
update_flows_items(ids: [ID!]!, data: update_directus_flows_input): [directus_flows]
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, updateFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
updateFlows(['flow_1_id', 'flow_2_id'], {
|
|
flow_field: 'value',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Query Parameters
|
|
|
|
Supports all [global query parameters](/reference/query).
|
|
|
|
#### Request Body
|
|
|
|
`keys` **Required**\
|
|
Array of primary keys of the flows you'd like to update.
|
|
|
|
`data` **Required**\
|
|
Any of [the flow object](#the-flow-object)'s properties.
|
|
|
|
### Response
|
|
|
|
Returns the [flow objects](#the-flow-object) for the updated flows.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`PATCH /flows`
|
|
|
|
```json
|
|
{
|
|
"keys": ["3f2facab-7f05-4ee8-a7a3-d8b9c634a1fc", "7259bfa8-3786-45c6-8c08-cc688e7ba229"],
|
|
"data": {
|
|
"status": "inactive"
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
mutation {
|
|
update_flows_items(
|
|
ids: ["3f2facab-7f05-4ee8-a7a3-d8b9c634a1fc", "7259bfa8-3786-45c6-8c08-cc688e7ba229"]
|
|
data: { status: "inactive" }
|
|
) {
|
|
id
|
|
name
|
|
status
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, updateFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
updateFlows(['53e623bd-cbeb-405d-8201-158af7e3ac83', '0ae04fb7-0f4e-4b5d-be2b-a166c4ee16e4'], {
|
|
status: 'inactive',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Delete a Flow
|
|
|
|
Delete an existing flow.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`DELETE /flows/:id`
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Mutation {
|
|
delete_flows_item(id: ID!): delete_one
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, deleteFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(deleteFlow('flow_id'));
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Response
|
|
|
|
Empty body.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`DELETE /flows/12204ee2-2c82-4d9a-b044-2f4842a11dba`
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
mutation {
|
|
delete_flows_item(id: "12204ee2-2c82-4d9a-b044-2f4842a11dba") {
|
|
id
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, deleteFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(deleteFlow('53e623bd-cbeb-405d-8201-158af7e3ac83'));
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Delete Multiple Flows
|
|
|
|
Delete multiple existing flows.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`DELETE /flows`
|
|
|
|
```json
|
|
["flow_1_key", "flow_2_key", "flow_3_key"]
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
type Mutation {
|
|
delete_flows_items(ids: [ID!]!): delete_many
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, deleteFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(deleteFlows(['flow_1_id', 'flow_2_id']));
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Request Body
|
|
|
|
An array of flows primary keys
|
|
|
|
### Response
|
|
|
|
Empty body.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`DELETE /flows`
|
|
|
|
```json
|
|
["25821236-8c2a-4f89-8fdc-c7d01f35877d", "02b9486e-4273-4fd5-b94b-e18fd923d1ed", "7d62f1e9-a83f-407b-84f8-1c184f014501"]
|
|
```
|
|
|
|
</template>
|
|
<template #graphql>
|
|
|
|
`POST /graphql/system`
|
|
|
|
```graphql
|
|
mutation {
|
|
delete_flows_items(
|
|
ids: [
|
|
"25821236-8c2a-4f89-8fdc-c7d01f35877d"
|
|
"02b9486e-4273-4fd5-b94b-e18fd923d1ed"
|
|
"7d62f1e9-a83f-407b-84f8-1c184f014501"
|
|
]
|
|
) {
|
|
ids
|
|
}
|
|
}
|
|
```
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, deleteFlows } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
deleteFlows(['53e623bd-cbeb-405d-8201-158af7e3ac83', '0ae04fb7-0f4e-4b5d-be2b-a166c4ee16e4'])
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Flow with GET webhook trigger
|
|
|
|
Start a flow with GET webhook trigger.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`GET /flows/trigger/:flow_uuid`
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, triggerFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
triggerFlow('GET', 'flow_id', {
|
|
fields: '*',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
### Response
|
|
|
|
Result of the flow, if any.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`GET /flows/trigger/202a940b-a00b-47df-b832-369c53f13122` `// Payload here`
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, triggerFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
triggerFlow('GET', '90a0fdd5-e760-4b4c-ac22-c14d48d44f26', {
|
|
fields: '*',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
## Flow with POST webhook trigger
|
|
|
|
Start a flow with POST webhook trigger.
|
|
|
|
### Request
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`POST /flows/trigger/:flow_uuid`
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, triggerFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
triggerFlow('POST', 'flow_id', {
|
|
field: 'value', // Payload for webhook
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|
|
|
|
#### Request Body
|
|
|
|
Payload for the POST request.
|
|
|
|
### Response
|
|
|
|
Result of the flow, if any.
|
|
|
|
### Example
|
|
|
|
<SnippetToggler :choices="['REST', 'GraphQL', 'SDK']" label="API">
|
|
<template #rest>
|
|
|
|
`POST /flows/trigger/202a940b-a00b-47df-b832-369c53f13122` `// Payload here`
|
|
|
|
</template>
|
|
<template #sdk>
|
|
|
|
```js
|
|
import { createDirectus } from '@directus/sdk';
|
|
import { rest, triggerFlow } from '@directus/sdk/rest';
|
|
|
|
const client = createDirectus('https://directus.example.com').with(rest());
|
|
|
|
const result = await client.request(
|
|
triggerFlow('POST', '90a0fdd5-e760-4b4c-ac22-c14d48d44f26', {
|
|
title: 'Created with flows and webhooks',
|
|
})
|
|
);
|
|
```
|
|
|
|
</template>
|
|
</SnippetToggler>
|