Skip to main content
PUT
/
api
/
contacts
/
query-bulk-move
Bulk-move all matching contacts to a target pipeline stage
curl --request PUT \
  --url https://your-instance.example.com/api/contacts/query-bulk-move \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "stageIds": [
    "64b2c3d4e5f60012345678aa"
  ],
  "pipelineType": "Contact",
  "ownerFilter": "unowned",
  "advancedParams": {
    "createdAfter": "2026-01-01T00:00:00.000Z"
  },
  "orgWide": false,
  "targetStageId": "64b2c3d4e5f60012345678bb",
  "targetStatus": "Contacted"
}
'
{
  "message": "Successfully moved 1428 contact(s)",
  "modifiedCount": 1428,
  "matchedCount": 1500
}

Documentation Index

Fetch the complete documentation index at: https://docs.tetherai.ca/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json

Shared filter shape used by query-count, query-bulk-move, query-bulk-delete, and query-bulk-export. Either supply stageIds[] OR set orgWide: true. pipelineType selects whether the operation runs against the Contact or Application collection.

targetStageId
string
required

Pipeline-stage ID to move matched contacts into.

targetStatus
string
required

Status string to set alongside the new stage.

stageIds
string[]

One or more pipeline-stage IDs. Required unless orgWide is true.

pipelineType
enum<string>

Which collection to target. Defaults to Contact.

Available options:
Contact,
Application
orgWide
boolean

When true, ignore stageIds and run across the whole organization.

ownerFilter
string

Owner-based scope (e.g. owned, unowned) — same semantics as the Contacts list view.

advancedParams
object

Optional advanced filter object (same shape as the Contacts list view).

Response

Move applied

message
string
required
modifiedCount
integer
required

Number of contacts whose status/stage actually changed.

matchedCount
integer
required

Total contacts matched by the filter.