> This page is optimized for agents. Use the linked Markdown pages and llms.txt indexes for related API content.

# Replace the steps of a play (before it runs). Comment and manual steps are refused for now

- Product: Reachiz API
- Section: Autopilot
- Snapshot: v1
- Method: `PUT`
- Path: `/v1/autopilot/plays/{id}/steps`

## Path parameters

### `id`

Type: `number`  
Required: yes  

## Request body

Required: yes  
Content types: `application/json`  

### `steps`

Type: `object[]`  
Required: yes  

#### object

Type: `object`  

##### `id`

Type: `string`  
Required: yes  

##### `kind`

Type: `string`  
Required: yes  
Allowed values: `reaction`, `invite`, `linkedin`, `email`, `comment`, `manual`  

comment and manual are refused for now

##### `delay`

Type: `object`  
Required: yes  

###### `count`

Type: `number`  
Required: yes  

###### `unit`

Type: `string`  
Required: yes  
Allowed values: `minutes`, `hours`, `days`  

##### `after`

Type: `string`  
Required: yes  
Allowed values: `previous`, `accept`, `no_reply`  

##### `text`

Type: `string`  
Required: no  

Variables look like {{first_name}}; a line of --- splits a message

##### `subject`

Type: `string`  
Required: no  

##### `reaction`

Type: `string`  
Required: no  
Allowed values: `match`, `like`, `celebrate`, `support`, `love`, `insightful`, `funny`  

## Execute with curl

```bash
curl -X PUT "https://prestigious-goldfish-661.convex.site/v1/autopilot/plays/$ID/steps" \
    -H "Authorization: Bearer $REACHIZ_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"steps":[{"id":"<id>","kind":"reaction","delay":{"count":0,"unit":"minutes"},"after":"previous"}]}'
```

## Execute with TypeScript

```ts
const response = await fetch("https://prestigious-goldfish-661.convex.site/v1/autopilot/plays/$ID/steps", {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${process.env.REACHIZ_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"steps":[{"id":"<id>","kind":"reaction","delay":{"count":0,"unit":"minutes"},"after":"previous"}]}),
});

const data = await response.json();
```

## Responses

### Response `200`

Category: success  

Success

#### `application/json`

##### Generated example

```json
{
  "id": -9007199254740991,
  "rank": -9007199254740991,
  "name": "name",
  "angle": "angle",
  "pitch": "pitch",
  "why": "why",
  "chips": [
    "chips"
  ],
  "channel": "linkedin_email",
  "status": "designed",
  "startAt": "startAt",
  "campaignId": -9007199254740991,
  "listId": -9007199254740991,
  "sequence": [
    {
      "day": -9007199254740991,
      "kind": "invite",
      "subject": "subject",
      "text": "text"
    }
  ],
  "build": {
    "label": "label",
    "step": -9007199254740991,
    "of": -9007199254740991
  },
  "strategy": "strategy",
  "reaches": "reaches",
  "choices": [
    "choices"
  ],
  "audience": 0,
  "creditsPerLead": 0,
  "steps": [
    {
      "id": "id",
      "kind": "reaction",
      "delay": {
        "count": 0,
        "unit": "minutes"
      },
      "after": "previous",
      "text": "text",
      "subject": "subject",
      "reaction": "match"
    }
  ],
  "sample": [
    {
      "leadId": -9007199254740991,
      "name": "name",
      "title": "title",
      "company": "company",
      "headline": "headline",
      "summary": "summary",
      "imageUrl": "imageUrl",
      "linkedinUrl": "linkedinUrl",
      "location": "location",
      "industry": "industry",
      "fit": "good",
      "messages": [
        {
          "day": -9007199254740991,
          "kind": "invite",
          "subject": "subject",
          "text": "text"
        }
      ]
    }
  ],
  "log": [
    {
      "role": "user",
      "text": "text",
      "at": "at"
    }
  ],
  "working": "working",
  "launchedAt": "launchedAt"
}
```

##### Schema

###### object

Type: `object`  

###### `id`

Type: `number`  
Required: yes  

###### `rank`

Type: `number`  
Required: yes  

###### `name`

Type: `string`  
Required: yes  

###### `angle`

Type: `string`  
Required: yes  

###### `pitch`

Type: `string`  
Required: yes  

###### `why`

Type: `string`  
Required: yes  

###### `chips`

Type: `string[]`  
Required: yes  

###### string

Type: `string`  

###### `channel`

Type: `string`  
Required: yes  
Allowed values: `linkedin_email`, `linkedin`  

###### `status`

Type: `string`  
Required: yes  
Allowed values: `designed`, `finding`, `writing`, `review`, `scheduled`, `running`, `stopped`, `failed`  

###### `startAt`

Type: `string`  
Required: yes  

###### string

Type: `string`  
Format: `date-time`  

###### unknown

Type: `unknown`  

###### `campaignId`

Type: `number`  
Required: yes  

###### number

Type: `number`  

###### unknown

Type: `unknown`  

###### `listId`

Type: `number`  
Required: yes  

###### number

Type: `number`  

###### unknown

Type: `unknown`  

###### `sequence`

Type: `object[]`  
Required: yes  

###### object[]

Type: `object[]`  

###### object

Type: `object`  

###### `day`

Type: `number`  
Required: yes  

###### `kind`

Type: `string`  
Required: yes  
Allowed values: `invite`, `linkedin`, `email`  

###### `subject`

Type: `string`  
Required: yes  

###### `text`

Type: `string`  
Required: yes  

###### unknown

Type: `unknown`  

###### `build`

Type: `object`  
Required: yes  

###### object

Type: `object`  

###### `label`

Type: `string`  
Required: yes  

###### `step`

Type: `number`  
Required: yes  

###### `of`

Type: `number`  
Required: yes  

###### unknown

Type: `unknown`  

###### `strategy`

Type: `string`  
Required: yes  

###### `reaches`

Type: `string`  
Required: yes  

###### `choices`

Type: `string[]`  
Required: yes  

###### string

Type: `string`  

###### `audience`

Type: `number`  
Required: yes  

Estimated leads who match

###### `creditsPerLead`

Type: `number`  
Required: yes  

###### `steps`

Type: `object[]`  
Required: yes  

###### object

Type: `object`  

###### `id`

Type: `string`  
Required: yes  

###### `kind`

Type: `string`  
Required: yes  
Allowed values: `reaction`, `invite`, `linkedin`, `email`, `comment`, `manual`  

comment and manual are refused for now

###### `delay`

Type: `object`  
Required: yes  

###### `count`

Type: `number`  
Required: yes  

###### `unit`

Type: `string`  
Required: yes  
Allowed values: `minutes`, `hours`, `days`  

###### `after`

Type: `string`  
Required: yes  
Allowed values: `previous`, `accept`, `no_reply`  

###### `text`

Type: `string`  
Required: no  

Variables look like {{first_name}}; a line of --- splits a message

###### `subject`

Type: `string`  
Required: no  

###### `reaction`

Type: `string`  
Required: no  
Allowed values: `match`, `like`, `celebrate`, `support`, `love`, `insightful`, `funny`  

###### `sample`

Type: `object[]`  
Required: yes  

###### object

Type: `object`  

###### `leadId`

Type: `number`  
Required: yes  

###### `name`

Type: `string`  
Required: yes  

###### `title`

Type: `string`  
Required: yes  

###### `company`

Type: `string`  
Required: yes  

###### `headline`

Type: `string`  
Required: yes  

###### `summary`

Type: `string`  
Required: yes  

###### `imageUrl`

Type: `string`  
Required: yes  

###### `linkedinUrl`

Type: `string`  
Required: yes  

###### `location`

Type: `string`  
Required: yes  

###### `industry`

Type: `string`  
Required: yes  

###### `fit`

Type: `string`  
Required: yes  

###### string

Type: `string`  
Allowed values: `good`, `bad`  

###### unknown

Type: `unknown`  

###### `messages`

Type: `object[]`  
Required: yes  

###### object

Type: `object`  

###### `day`

Type: `number`  
Required: yes  

###### `kind`

Type: `string`  
Required: yes  
Allowed values: `invite`, `linkedin`, `email`  

###### `subject`

Type: `string`  
Required: yes  

###### `text`

Type: `string`  
Required: yes  

###### `log`

Type: `object[]`  
Required: yes  

###### object

Type: `object`  

###### `role`

Type: `string`  
Required: yes  
Allowed values: `user`, `agent`  

###### `text`

Type: `string`  
Required: yes  

###### `at`

Type: `string`  
Format: `date-time`  
Required: yes  

###### `working`

Type: `string`  
Required: yes  

###### `launchedAt`

Type: `string`  
Required: yes  

###### string

Type: `string`  
Format: `date-time`  

###### unknown

Type: `unknown`  

### Response `400`

Category: client-error  

The request is not valid. error.fields lists each problem.

#### `application/json`

##### Generated example

```json
{
  "error": {
    "code": "invalid_request",
    "message": "message",
    "requestId": "requestId",
    "recovery": "recovery",
    "fields": [
      {
        "path": "path",
        "message": "message"
      }
    ]
  }
}
```

##### Schema

###### Error

Type: `Error`  

###### `error`

Type: `object`  
Required: yes  

###### `code`

Type: `string`  
Required: yes  
Allowed values: `invalid_request`, `not_supported`, `unauthorized`, `subscription_required`, `forbidden`, `plan_limit_exceeded`, `workspace_suspended`, `not_found`, `conflict`, `conversation_changed`, `rate_limited`, `internal`, `unavailable`  

###### `message`

Type: `string`  
Required: yes  

###### `requestId`

Type: `string`  
Required: yes  

###### `recovery`

Type: `string`  
Required: no  

What to do next.

###### `fields`

Type: `object[]`  
Required: no  

###### object

Type: `object`  

###### `path`

Type: `string`  
Required: yes  

###### `message`

Type: `string`  
Required: yes  

### Response `401`

Category: client-error  

The API key is missing or not valid.

#### `application/json`

##### Generated example

```json
{
  "error": {
    "code": "invalid_request",
    "message": "message",
    "requestId": "requestId",
    "recovery": "recovery",
    "fields": [
      {
        "path": "path",
        "message": "message"
      }
    ]
  }
}
```

##### Schema

###### Error

Type: `Error`  

###### `error`

Type: `object`  
Required: yes  

###### `code`

Type: `string`  
Required: yes  
Allowed values: `invalid_request`, `not_supported`, `unauthorized`, `subscription_required`, `forbidden`, `plan_limit_exceeded`, `workspace_suspended`, `not_found`, `conflict`, `conversation_changed`, `rate_limited`, `internal`, `unavailable`  

###### `message`

Type: `string`  
Required: yes  

###### `requestId`

Type: `string`  
Required: yes  

###### `recovery`

Type: `string`  
Required: no  

What to do next.

###### `fields`

Type: `object[]`  
Required: no  

###### object

Type: `object`  

###### `path`

Type: `string`  
Required: yes  

###### `message`

Type: `string`  
Required: yes  

### Response `403`

Category: client-error  

The key lacks the scope this route needs.

#### `application/json`

##### Generated example

```json
{
  "error": {
    "code": "invalid_request",
    "message": "message",
    "requestId": "requestId",
    "recovery": "recovery",
    "fields": [
      {
        "path": "path",
        "message": "message"
      }
    ]
  }
}
```

##### Schema

###### Error

Type: `Error`  

###### `error`

Type: `object`  
Required: yes  

###### `code`

Type: `string`  
Required: yes  
Allowed values: `invalid_request`, `not_supported`, `unauthorized`, `subscription_required`, `forbidden`, `plan_limit_exceeded`, `workspace_suspended`, `not_found`, `conflict`, `conversation_changed`, `rate_limited`, `internal`, `unavailable`  

###### `message`

Type: `string`  
Required: yes  

###### `requestId`

Type: `string`  
Required: yes  

###### `recovery`

Type: `string`  
Required: no  

What to do next.

###### `fields`

Type: `object[]`  
Required: no  

###### object

Type: `object`  

###### `path`

Type: `string`  
Required: yes  

###### `message`

Type: `string`  
Required: yes  

### Response `404`

Category: client-error  

The resource does not exist, or belongs to another account.

#### `application/json`

##### Generated example

```json
{
  "error": {
    "code": "invalid_request",
    "message": "message",
    "requestId": "requestId",
    "recovery": "recovery",
    "fields": [
      {
        "path": "path",
        "message": "message"
      }
    ]
  }
}
```

##### Schema

###### Error

Type: `Error`  

###### `error`

Type: `object`  
Required: yes  

###### `code`

Type: `string`  
Required: yes  
Allowed values: `invalid_request`, `not_supported`, `unauthorized`, `subscription_required`, `forbidden`, `plan_limit_exceeded`, `workspace_suspended`, `not_found`, `conflict`, `conversation_changed`, `rate_limited`, `internal`, `unavailable`  

###### `message`

Type: `string`  
Required: yes  

###### `requestId`

Type: `string`  
Required: yes  

###### `recovery`

Type: `string`  
Required: no  

What to do next.

###### `fields`

Type: `object[]`  
Required: no  

###### object

Type: `object`  

###### `path`

Type: `string`  
Required: yes  

###### `message`

Type: `string`  
Required: yes  

### Response `429`

Category: client-error  

Too many requests.

#### `application/json`

##### Generated example

```json
{
  "error": {
    "code": "invalid_request",
    "message": "message",
    "requestId": "requestId",
    "recovery": "recovery",
    "fields": [
      {
        "path": "path",
        "message": "message"
      }
    ]
  }
}
```

##### Schema

###### Error

Type: `Error`  

###### `error`

Type: `object`  
Required: yes  

###### `code`

Type: `string`  
Required: yes  
Allowed values: `invalid_request`, `not_supported`, `unauthorized`, `subscription_required`, `forbidden`, `plan_limit_exceeded`, `workspace_suspended`, `not_found`, `conflict`, `conversation_changed`, `rate_limited`, `internal`, `unavailable`  

###### `message`

Type: `string`  
Required: yes  

###### `requestId`

Type: `string`  
Required: yes  

###### `recovery`

Type: `string`  
Required: no  

What to do next.

###### `fields`

Type: `object[]`  
Required: no  

###### object

Type: `object`  

###### `path`

Type: `string`  
Required: yes  

###### `message`

Type: `string`  
Required: yes  

### Response `503`

Category: server-error  

The service is busy. Retry with backoff.

#### `application/json`

##### Generated example

```json
{
  "error": {
    "code": "invalid_request",
    "message": "message",
    "requestId": "requestId",
    "recovery": "recovery",
    "fields": [
      {
        "path": "path",
        "message": "message"
      }
    ]
  }
}
```

##### Schema

###### Error

Type: `Error`  

###### `error`

Type: `object`  
Required: yes  

###### `code`

Type: `string`  
Required: yes  
Allowed values: `invalid_request`, `not_supported`, `unauthorized`, `subscription_required`, `forbidden`, `plan_limit_exceeded`, `workspace_suspended`, `not_found`, `conflict`, `conversation_changed`, `rate_limited`, `internal`, `unavailable`  

###### `message`

Type: `string`  
Required: yes  

###### `requestId`

Type: `string`  
Required: yes  

###### `recovery`

Type: `string`  
Required: no  

What to do next.

###### `fields`

Type: `object[]`  
Required: no  

###### object

Type: `object`  

###### `path`

Type: `string`  
Required: yes  

###### `message`

Type: `string`  
Required: yes  

## Related representations

- [Human documentation](/reachiz/sections/autopilot/operations/put-v1-autopilot-plays-id-steps/)
- [curl Markdown](/reachiz/sections/autopilot/operations/put-v1-autopilot-plays-id-steps.md?lang=curl)
- [TypeScript Markdown](/reachiz/sections/autopilot/operations/put-v1-autopilot-plays-id-steps.md?lang=typescript)
- [site llms.txt](/llms.txt)
- [product llms.txt](/reachiz/llms.txt)
- [snapshot llms.txt](/reachiz/llms.txt)
