Skip to content
Return to top
On this page

# Custom Operations #

> Custom Operations allow you to create new types of steps for flows. Learn more about Operations.

## Extension Entrypoints #

Your operation has two entrypoints. The App entrypoint is the `app` file and the API entrypoint is the `api` file inside the `src/` folder of your extension package.

### App Entrypoint #

The App entrypoint exports a configuration object with options to configure the appearance of your operation. When loading your operation, this object is imported by the Directus App host.

Example of an entrypoint:

js

    export default {
    	id: 'custom',
    	name: 'Custom',
    	icon: 'box',
    	description: 'This is my custom operation!',
    	overview: ({ text }) => [
    		{
    			label: 'Text',
    			text: text,
    		},
    	],
    	options: [
    		{
    			field: 'text',
    			name: 'Text',
    			type: 'string',
    			meta: {
    				width: 'full',
    				interface: 'input',
    			},
    		},
    	],
    };

#### Available Options #

- `id` — The unique key for this operation. It is good practice to scope proprietary operations with an author prefix.
- `name` — The human-readable name for this operation.
- `icon` — An icon name from the material icon set, or the extended list of Directus custom icons.
- `description` — A short description (<80 characters) of this operation shown in the App.
- `overview` — An overview that will be shown on the operation's tile. Can be either a function that receives the options of the operation and returns an array of objects containing `label` and `text` or a dedicated Vue component.
- `options` — The options of your operation. Can be either an options object or a dedicated Vue component.

### API Entrypoint #

The API entrypoint exports a configuration object with options to configure the behavior of your operation. When loading your operation, this object is imported by the Directus API host.

Example of an entrypoint:

js

    export default {
    	id: 'custom',
    	handler: ({ text }) => {
    		console.log(text);
    	},
    };

#### Available Options #

- `id` — The unique key for this operation. It is good practice to scope proprietary operations with an author prefix.
- `handler` — The operations's handler function.

Extension Id

The extension id needs to be identical for both entrypoints in order for Directus to recognize them as part of the same extension.

## Handler Function #

The handler function defined inside the API endpoint will be called whenever the flow the operation is connected to is executed. To trigger the operation connected to the `resolve` anchor, the handler function has to return a value. To trigger the operation connected to the `reject` anchor, the handler function has to throw with a value. This value will then be added to the data chain.

The handler function receives the two parameters `options` and `context`. `options` is an object with the operation's options as properties and their respective already interpolated values. `context` is an object with the following properties:

- `services` — All API internal services.
- `exceptions` — API exception objects that can be used to throw "proper" errors.
- `database` — Knex instance that is connected to the current database.
- `getSchema` — Async function that reads the full available schema for use in services
- `env` — Parsed environment variables.
- `logger` — Pino instance.
- `data` — Object containing the raw data returned by the previous operations.
- `accountability` — Information about the current user received by the trigger.