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.
/v1/accounts/{accountGroupId}/campaignsStarter-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
accountGroupIdPathType: string
Account group ID that scopes the request.
Required
Request body
Required
Optional
Content types
application/json
Schema
object
Fields
starterTemplateIdType: engage-inmail | engage-connect-dm | connect-engage-dm | connect
Starter template ID used to create the campaign draft.
Required
nameType: string
Human-readable name for this resource.
Required
audienceIdType: string
Audience ID that identifies the list or folder target.
Required
leadIdsType: array<string>
Lead IDs to include in the requested operation.
Optional
Responses
Created draft campaign metadata
Schema: CampaignSuccessResponse
Request validation failed
Schema: ValidationErrorResponse
Invalid or missing API key
Schema: ErrorResponse
Missing required permission
Schema: ErrorResponse
Conflict — resource is in a state that prevents this operation
Schema: ErrorResponse
Rate limit exceeded
Schema: ErrorResponse
Internal server error
Schema: ErrorResponse
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"
}