# POST /opportunities/bulk-move

**Resource:** [Opportunities](./opportunities.md)  
**Scopes:** `opportunities:write`  
**Write operation:** yes

Move up to 100 opportunities to a pipeline stage in a single request. Set skip_automations=true to suppress all stage_changed automation triggers (recommended for bulk moves to avoid flooding contacts). Alternatively, pass skip_action_ids to suppress only specific automation actions across all records in the batch. Returns a count of moved records and any IDs that failed. Legacy alias: POST /deals/bulk-move.

## Parameters

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `ids` | body | uuid[] | yes | Array of opportunity UUIDs to move (max 100) |
| `pipeline_id` | body | uuid | yes | Target pipeline UUID |
| `stage_id` | body | uuid | yes | Target stage UUID within the pipeline |
| `skip_automations` | body | boolean | no | Suppress ALL stage_changed automation triggers (default false). Strongly recommended for bulk moves. |
| `skip_action_ids` | body | uuid[] | no | Array of automation action UUIDs to suppress across all records in this bulk move. Automations still fire but these actions are bypassed on every record. |

## Request example

```bash
curl -X POST \
  "https://api.trustpager.com/functions/v1/api/v1/opportunities/bulk-move" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids":["uuid-1","uuid-2"],"pipeline_id":"pipe-uuid","stage_id":"stage-uuid","skip_action_ids":["email-action-uuid"]}'
```

## Response example

```json
{
  "data": { "success": true, "moved": 2 },
  "meta": { "credits_remaining": 9440 }
}
```

---
Base URL: `https://api.trustpager.com/functions/v1/api/v1` — Auth: `Authorization: Bearer YOUR_API_KEY`