Back to reference

API Reference

Create a draft campaign from a curated starter template

Creates a draft campaign from one of Sonarly's bounded starter templates. The request accepts only a public starterTemplateId, campaign name, audienceId, and optional leadIds subset. Workflow nodes, internal identifiers, and raw workflow payloads are always generated server-side.

POST/v1/accounts/{accountGroupId}/campaigns

Starter-template drafts

Campaign creation uses the curated starter-template catalog. Create the draft first, then inspect or update editable content slots before execution.

Integration notes

Required API permission

campaigns:write.

Prerequisites

integration_api_key, account_group_access.

Idempotency

not supported; check the current resource state before retrying this request.

Parameters

accountGroupIdPath

Type: string

Account group ID that scopes the request.

Required

Request body

Required

Optional

Content types

application/json

Schema

object

Fields

starterTemplateId

Type: engage-inmail | engage-connect-dm | connect-engage-dm | connect

Starter template ID used to create the campaign draft.

Required

name

Type: string

Human-readable name for this resource.

Required

audienceId

Type: string

Audience ID that identifies the list or folder target.

Required

leadIds

Type: array<string>

Lead IDs to include in the requested operation.

Optional

Responses

201

Created draft campaign metadata

Schema: CampaignSuccessResponse

400

Request validation failed

Schema: ValidationErrorResponse

401

Invalid or missing API key

Schema: ErrorResponse

403

Missing required permission

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

201 Example JSONCampaignSuccessResponse
{
    "success": true,
    "data": {
        "id": "507f1f77bcf86cd799439011",
        "name": "Avery Stone",
        "description": "string",
        "status": "draft",
        "selectedLeadCount": 25,
        "includeConversationHistory": true,
        "autoCancelOnMessageReceived": true,
        "outreachLanguage": "en",
        "createdAt": "string",
        "updatedAt": "string",
        "startedAt": "string",
        "rateLimitedUntil": "string"
    },
    "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"
}
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"
}