> ## Documentation Index
> Fetch the complete documentation index at: https://docs.teamfollowup.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use the public API base URL: https://api.teamfollowup.ai/api.
> Authenticate public API requests with Authorization: Bearer YOUR_API_KEY.
> Use product-owned terms: agents, calls, campaigns, contacts, phone numbers, billing, and configuration.

# Move leads to another step

> Move waiting leads to a different step of their schedule. The next call time is recomputed from the target step’s slot in each lead’s own timezone, and any actions still pending on the old step are cleared. Only leads in a waiting status are moved: one that is mid-dial, pinned to a callback, on an appointment-reminder schedule, or whose schedule has no such step is listed in `skipped` with a reason rather than failing the request. Customer roles: `agency_admin`, `project_user`.

Required API key scope: `power_dialer:write`.



## OpenAPI

````yaml /openapi.yaml post /api/power-dialer/move
openapi: 3.1.0
info:
  title: TFUAI Server API
  version: 1.0.0
  description: >-
    API reference for the TFUAI SaaS server.


    All published endpoints are mounted under `/api`. Responses use a standard
    envelope: `{ "success": true, ... }` on success and `{ "success": false,
    "error": "..." }` on failure.


    Product API modules are being launched module by module. This spec currently
    exposes only contracted public modules.


    Authenticate public API requests with an API key in the `Authorization`
    header: `Authorization: Bearer YOUR_API_KEY`.
servers:
  - url: https://api.teamfollowup.ai
    description: Production API origin. Public API paths are under /api.
  - url: https://devapi.teamfollowup.ai
    description: Development API origin. Public API paths are under /api.
security: []
tags:
  - name: Agents
    description: Manage voice agents, campaigns, workflows, and outcomes.
  - name: Analytics
    description: >-
      Minimal, non-billing performance summary: volume, conversion, and pickup
      metrics.
  - name: Calls
    description: Review calls, test runs, and execution history.
  - name: Campaign Workflows
    description: >-
      What runs after a call lands: for each outcome (booked, opted out, asked
      for a callback…), an ordered chain of actions — tag the contact, move a
      pipeline stage, send an SMS, book an appointment. Stored as a graph:
      `nodes` are the actions, `edges` say what follows what, and
      `dispositionEntries` maps each outcome to the node its chain starts at.


      **Pick the narrowest endpoint that does the job.**


      | To | Call | |

      | --- | --- | --- |

      | See what fires per outcome | `GET .../workflow/digest` | Reads as plain
      text, no graph walking |

      | Add steps to an outcome | `POST .../outcomes/{outcome}/nodes` | Server
      derives node ids, edge ids, handles, layout |

      | Change a message, tag or setting | `PATCH .../workflow` | Merges;
      carries no graph, so it cannot damage one |

      | Remove one step | `DELETE .../nodes/{nodeId}` | Also re-links the chain
      around it |

      | Author or replace the whole graph | `PUT .../workflow` | Replaces
      everything you send |


      `PUT` is the only one that can re-wire, position nodes, build an `if`,
      save an unconfigured draft, or copy a whole workflow — and the only one
      that can overwrite a change someone else made after you read it. Use it
      when you are genuinely authoring the graph, and send `expectedVersion`
      when you do. For everything else the narrower endpoints are both easier
      and safer.
  - name: Contacts
    description: Contact list, filters, contact call history, and do-not-call actions.
  - name: GHL
    description: CRM variables and contact helpers used by agent and campaign setup flows.
  - name: Phone Numbers
    description: >-
      Caller ID pool, number search, assignment, movement, and release
      endpoints.
  - name: Power Dialer
    description: >-
      Power Dialer queue, lead cadence, callback, parked lead, and campaign
      schedule endpoints.
  - name: Projects
    description: >-
      Project management endpoints: list, update, disconnect, configure project
      campaigns, and validate setup.
  - name: Skills and Tools
    description: Manage reusable agent behaviors and in-call tool descriptions.
  - name: Voices
    description: Voice catalogue endpoints for choosing the voice used by an agent.
paths:
  /api/power-dialer/move:
    post:
      tags:
        - Power Dialer
      summary: Move leads to another step
      description: >-
        Move waiting leads to a different step of their schedule. The next call
        time is recomputed from the target step’s slot in each lead’s own
        timezone, and any actions still pending on the old step are cleared.
        Only leads in a waiting status are moved: one that is mid-dial, pinned
        to a callback, on an appointment-reminder schedule, or whose schedule
        has no such step is listed in `skipped` with a reason rather than
        failing the request. Customer roles: `agency_admin`, `project_user`.


        Required API key scope: `power_dialer:write`.
      operationId: move-leads
      requestBody:
        required: true
        description: Leads to move, and where to.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PowerDialerMoveRequest'
            examples:
              default:
                value:
                  queueIds:
                    - queue_123
                    - queue_456
                  targetStep: 2
      responses:
        '200':
          description: Move result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PowerDialerMoveResponse'
              examples:
                default:
                  value:
                    success: true
                    data:
                      count: 1
                      modifiedCount: 1
                      updated: 1
                      skipped:
                        - queueId: queue_456
                          reason: callback-pinned
        '400':
          description: Validation failed or the request is malformed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PowerDialerErrorResponse'
              examples:
                default:
                  value:
                    success: false
                    error: cadenceStep query parameter is required
        '401':
          description: Missing or invalid authentication.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PowerDialerErrorResponse'
              examples:
                default:
                  value:
                    success: false
                    error: Unauthorized
        '403':
          description: >-
            Authenticated but not permitted to access the requested project or
            schedule.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PowerDialerErrorResponse'
              examples:
                default:
                  value:
                    success: false
                    error: You do not have access to this project
        '429':
          description: Rate limit exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PowerDialerErrorResponse'
              examples:
                default:
                  value:
                    success: false
                    error: TooManyRequests
        '500':
          description: Unexpected server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PowerDialerErrorResponse'
              examples:
                default:
                  value:
                    success: false
                    error: Unexpected server error.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: bash
          label: cURL
          source: |-
            curl --request POST \
              --url https://api.teamfollowup.ai/api/power-dialer/move \
              --header 'Authorization: Bearer YOUR_API_KEY' \
              --header 'Content-Type: application/json' \
              --data '{
              "queueIds": [
                "queue_123",
                "queue_456"
              ],
              "targetStep": 2
            }'
components:
  schemas:
    PowerDialerMoveRequest:
      type: object
      additionalProperties: false
      required:
        - queueIds
        - targetStep
      properties:
        queueIds:
          type: array
          minItems: 1
          maxItems: 200
          items:
            type: string
          example:
            - queue_123
        targetStep:
          type: integer
          minimum: 0
          description: >-
            Zero-based index into the lead’s own schedule. A lead whose schedule
            is shorter than this is skipped.
          example: 2
    PowerDialerMoveResponse:
      type: object
      additionalProperties: false
      required:
        - success
        - data
      properties:
        success:
          type: boolean
        data:
          $ref: '#/components/schemas/PowerDialerMoveData'
    PowerDialerErrorResponse:
      type: object
      additionalProperties: {}
      required:
        - success
        - error
      properties:
        success:
          type: boolean
        error:
          type: string
          example: You do not have access to this project
        code:
          type: string
          example: FORBIDDEN
        message:
          type: string
          example: You do not have access to this project
    PowerDialerMoveData:
      type: object
      additionalProperties: false
      required:
        - count
      properties:
        count:
          type: integer
          description: >-
            Number of leads actually moved. Lower than the number of ids sent
            whenever any were skipped.
          example: 1
        modifiedCount:
          type: integer
          description: Legacy alias of `count`.
          example: 1
        updated:
          type: integer
          description: Legacy alias of `count`.
          example: 1
        skipped:
          type: array
          description: Every lead that was not moved, each with the reason. Never an error.
          items:
            $ref: '#/components/schemas/PowerDialerSkippedLead'
    PowerDialerSkippedLead:
      type: object
      additionalProperties: false
      required:
        - queueId
        - reason
      properties:
        queueId:
          type: string
          example: queue_456
        reason:
          type: string
          description: >-
            Why this lead was left where it was. One of: `status <callStatus>`
            (not waiting), `callback-pinned`, `reminder cadence`, `target step
            not in cadence`, `not found`, or `row changed mid-move`.
          example: callback-pinned
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: 'Send your API key as `Authorization: Bearer YOUR_API_KEY`.'

````