---
title: "Run the required Instagram comment-to-DM simulation suite"
method: POST
path: "/api/campaigns/{id}/comment-simulation-suite"
tags: ["Campaigns"]
---

# Run the required Instagram comment-to-DM simulation suite

`POST /api/campaigns/{id}/comment-simulation-suite`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/campaigns/{id}/comment-simulation-suite`
- Auth: one of:
  - API key in cookie `luca.session_token`
  - API key in header `x-api-key`
  - HTTP bearer

Runs the Instagram comment-to-DM suite. Any campaign that uses comment automation has to pass it before it can publish.

**API key scopes:** `campaigns:write`. You also need an `Idempotency-Key` header.

## Path parameters

- `id` string, uuid, required

## Headers

- `Luca-API-Version` '1'

## Request body

- CampaignCommentSimulationSuiteCreate
  - `autoSend` boolean

## Response `200`

ok

- CampaignCommentSimulationSuiteResponse
  - `campaignId` string, uuid, required
  - `graphHash` string, required
  - `status` 'missing' | 'stale' | 'failed' | 'passed', required
  - `cases` object[], required
    - `id` string, required
    - `label` string, required
    - `expected` 'matched' | 'not_matched' | 'suppressed' | 'provider_ready', required
    - `passed` boolean, required
    - `simulationId` string, uuid, required
    - `status` 'completed' | 'waiting' | 'blocked' | 'max_steps', required
    - `findingCodes` string[], required
  - `simulations` object[], required
    - `id` string, uuid, required
    - `campaignId` string, uuid, required
    - `sourceKind` 'fake_input' | 'seed_case' | 'replayed_enrollment', required
    - `eventType` 'instagram_comment' | 'instagram_dm' | 'whatsapp_reply' | 'booking_event' | 'crm_event' | 'webhook_event' | 'csv_import' | 'manual_enrollment', required
    - `status` 'completed' | 'waiting' | 'blocked' | 'max_steps', required
    - `finalNodeId` string, nullable, required
    - `blockers` object[], required
      - `code` string, required
      - `severity` 'blocker' | 'warning', required
      - `message` string, required
      - `nodeId` string
      - `edgeId` string
    - `warnings` object[], required
      - `code` string, required
      - `severity` 'blocker' | 'warning', required
      - `message` string, required
      - `nodeId` string
      - `edgeId` string
    - `createdByUserId` string, nullable, required
    - `createdAt` string, required
    - `updatedAt` string, required
    - `draftGraphHash` string, required
    - `campaignVersionId` string, uuid, nullable, required
    - `replayedEnrollmentId` string, uuid, nullable, required
    - `input` object, required
      - `lead` object, required
      - `eventPayload` object, required
      - `context` object, required
      - `startNodeId` string, nullable, required
      - `maxSteps` integer, required
    - `trace` object[], required
      - `id` string, uuid
      - `index` integer, required
      - `nodeId` string, required
      - `nodeType` union, required
        - 'trigger' | 'condition' | 'action' | 'message' | 'booking' | 'wait_duration' | 'wait_until_time' | 'wait_for_event' | 'wait_for_reply' | 'wait_for_condition' | 'branch' | 'control' | 'stop' | 'handoff' | 'split' | 'exit_on'
        - 'missing'
      - `decision` 'node_missing' | 'complete' | 'complete_no_next' | 'wait_timer' | 'wait_event' | 'wait_condition' | 'advance', required
      - `nextNodeId` string, nullable, required
      - `branchOutcome` string, nullable, required
      - `action` unknown
      - `mockedSideEffect` object, nullable, required
      - `generatedDraft` string, nullable, required
      - `waitMs` integer, nullable, required
      - `findings` object[], required
        - `code` string, required
        - `severity` 'blocker' | 'warning', required
        - `message` string, required
        - `nodeId` string
        - `edgeId` string
      - `createdAt` string
    - `generatedDrafts` string[], required
    - `mockedSideEffects` object[], required
    - `outcome` object, required

## Other responses

- `400`: bad request
- `401`: unauthorized
- `404`: not found
- `409`: conflict
- `429`: rate limited
- `500`: internal error
- `503`: service unavailable

---

[API](https://skmtc.dev/setluca/apis/luca-api.md) · [All operations](https://skmtc.dev/setluca/apis/luca-api/llms.txt) · [OpenAPI document](https://skmtc.dev/setluca/apis/luca-api/revisions/90a200e4100b?raw)
