Back to reference

API Reference

Approve a campaign run

Accepts an empty JSON object, atomically approves every pending content item for one prospect's workflow run, and continues that existing run with the currently saved messages. Individual messages cannot be approved or ignored independently. Approval does not send all follow-ups immediately: waits and branches continue in workflow order. To edit selected messages first, call the workflow-run messages endpoint before approving.

POST/v1/accounts/{accountGroupId}/campaigns/{campaignId}/workflow-runs/{workflowInstanceId}/approve

Approve run

Approving clears the approval gate and resumes the existing campaign workflow with the currently saved messages.

Integration notes

Required API permission

campaigns:write.

Prerequisites

integration_api_key, account_group_access.

Idempotency

send a stable Idempotency-Key header when retrying this request.

Parameters

accountGroupIdPath

Type: string

Account group ID that scopes the request.

Required

campaignIdPath

Type: string

Campaign ID that identifies the campaign to read or mutate.

Required

workflowInstanceIdPath

Type: string

Unique identifier for the workflow instance.

Required

Idempotency-KeyHeader

Type: string

Request field for idempotency key.

Required

Request body

Required

Optional

Content types

application/json

Schema

ApproveCampaignRunBody

Responses

200

Campaign run approved and workflow status refreshed

Schema: CampaignApprovalResultSuccessResponse

400

Request validation failed

Schema: ValidationErrorResponse

401

Invalid or missing API key

Schema: ErrorResponse

403

Missing required permission

Schema: ErrorResponse

404

Resource not found

Schema: ErrorResponse

409

Conflict — resource is in a state that prevents this operation

Schema: ErrorResponse

429

Rate limit exceeded

Schema: ErrorResponse

500

Internal server error

Schema: ErrorResponse

502

Upstream service error

Schema: ErrorResponse

Response examples

200 Example JSONCampaignApprovalResultSuccessResponse
{
    "success": true,
    "data": {
        "action": "approved",
        "workflowInstanceId": "507f1f77bcf86cd799439011",
        "leadStatus": {
            "leadId": "507f1f77bcf86cd799439011",
            "workflowStatus": "pending",
            "workflowInstanceId": "507f1f77bcf86cd799439011",
            "latestStep": "string",
            "workflowStopReason": "CONTENT_DISCARDED",
            "hasPendingApproval": true
        }
    },
    "error": null,
    "traceId": "507f1f77bcf86cd799439011"
}
400 Example JSONValidationErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "VALIDATION_ERROR",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}
401 Example JSONErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "string",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}
403 Example JSONErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "string",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}
404 Example JSONErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "string",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}
409 Example JSONErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "string",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}
429 Example JSONErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "string",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}
500 Example JSONErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "string",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}
502 Example JSONErrorResponse
{
    "success": false,
    "data": null,
    "error": {
        "code": "string",
        "message": "Thanks for the context. I can send over details this afternoon.",
        "details": "string"
    },
    "traceId": "507f1f77bcf86cd799439011"
}