---
title: "Fire action by ID"
method: PUT
path: "/api/v1/workflow/actions/{actionId}/fire"
tags: ["Workflow"]
---

# Fire action by ID

`PUT /api/v1/workflow/actions/{actionId}/fire`

Fires a [workflow action](https://www.dotcms.com/docs/latest/managing-workflows#Actions), specified by identifier, on a target contentlet.

Returns a map of the resultant contentlet, with an additional `AUTO_ASSIGN_WORKFLOW` property, which can be referenced by delegate services that handle automatically assigning workflow schemes to content with none.

**Use this endpoint to fire actions that are not represented as `SystemAction` tokens** (`NEW`, `EDIT`, `PUBLISH`, etc.). The two most common are `Move` and `Copy` on the System Workflow scheme.

**Move action** — relocates a contentlet to a new folder/host. Request body shape (note: `pathToMove` is a sibling of `contentlet`, **not** nested inside it):

```json
{
  "contentlet": { "identifier": "<contentlet-identifier>" },
  "pathToMove": "//<siteHost>/<folderPath>"
}
```
Alternative shapes (`contentlet.host`+`contentlet.folder`, `contentlet.hostFolder`, `path` instead of `pathToMove`) all return `400 "The host path is not valid: null"`.

**Copy action** — clones a contentlet. Fire with `?identifier=<source-id>` and an empty body (or `{"contentlet": {"identifier": "<source-id>"}}`). The Copy action id on the default System Workflow scheme is `963f6a04-5320-42e7-ab74-6d876d199946`; retrieve it for other environments via `GET /api/v1/workflow/schemes/{schemeId}/actions`. ⚠️ The response `entity` returns the **source** contentlet, not the newly-created copy — locate the copy via a follow-up `POST /api/content/_search` ordered by `modDate DESC`. The copy lands in `SYSTEM_HOST` / `SYSTEM_FOLDER`; destination hints (`pathToMove`, `host`, `folder`, `hostFolder`) are silently ignored. Fire the Move action afterwards to relocate.

**When chaining workflow actions or reading state back immediately after firing, pass `indexPolicy=WAIT_FOR` on each call.** The default `DEFER` is asynchronous and can return stale index reads for several seconds, which can mimic server-side state bugs. For isolated one-off fires where nothing reads the result, leave the default.

## Path parameters

- `actionId` string, required

## Query parameters

- `inode` string
- `identifier` string
- `indexPolicy` 'DEFER' | 'WAIT_FOR' | 'FORCE'
- `language` string

## Request body

- FireActionForm
  - `comments` string
  - `assign` string
  - `publishDate` string
  - `publishTime` string
  - `expireDate` string
  - `expireTime` string
  - `neverExpire` string
  - `whereToSend` string
  - `filterKey` string
  - `query` string
  - `pathToMove` string
  - `timezoneId` string
  - `individualPermissions` object
  - `iwantTo` string
  - `contentlet` object

## Response `200`

Fired action successfully

- ResponseEntityMapView
  - `errors` ErrorEntity[]
    - `errorCode` string
    - `message` string
    - `fieldName` string
  - `entity` object
  - `messages` MessageEntity[]
    - `message` string
  - `i18nMessagesMap` object
  - `permissions` string[]
  - `pagination` Pagination
    - `currentPage` integer
    - `perPage` integer
    - `totalEntries` integer

## Other responses

- `400` — Bad request
- `401` — Invalid User
- `403` — Forbidden
- `404` — Content not found
- `406` — Not Acceptable
- `415` — Unsupported Media Type
- `500` — Internal Server Error

---

[API](https://skmtc.dev/jostens/apis/dotcms-rest-api.md) · [All operations](https://skmtc.dev/jostens/apis/dotcms-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/jostens/dotcms-rest-api/revisions/a088fe9f515c/schema)
