API Reference
Create a writing style
Creates a writing style template. Sample subjects and messages support Spintax such as `{Hi|Hello}` plus profile variables `{{ First_name }}`, `{{ Last_name }}`, `{{ Title }}`, `{{ Company_name }}`, `{{ Location }}`, and `{{ Industry }}`. Signal samples also support `{{ Signal }}` and `{{ Signal_anonym }}`. Sonarly renders these before content approval; workflow-run message updates must contain final text without unresolved variables.
/v1/accounts/{accountGroupId}/writing-stylesTemplate mode
Templates preserve their structure while variables are filled. Set basicOnly to true with exactly one Basic sample when messages should ignore signal context, including on signal workflow paths.
Signal variables
{{ Signal }} uses a direct reference to the selected signal. {{ Signal_anonym }} softens the same signal without naming the explicit event or source.
Spintax syntax
Use single braces and pipes for alternatives in samples[].message or samples[].subject, for example {Hi|Hello} {{ First_name }}. Keep template variables in double braces.
Syntax handling
The API preserves template text exactly. Use exact double-brace variable names for variables and valid single-brace Spintax groups for randomized alternatives.
Integration notes
Required API permission
templates:write.
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
nameType: string
Human-readable name for this resource.
Required
descriptionType: string
Human-readable description for this resource.
Optional
contentTypeType: direct_message | inmail | direct_message_inmail | email | comment | connection_request
Request field for content type.
Optional
basicOnlyType: boolean
Restricts the writing style to one Basic template and ignores signal context for messages.
Optional
samplesType: array<object>
Request field for samples.
Required
valuePropositionIdType: string
Value proposition ID used for campaign messaging.
Optional
includeRulesType: array<string>
Request field for include rules.
Optional
excludeRulesType: array<string>
Request field for exclude rules.
Optional
Responses
Writing style created
Schema: WritingStyleSuccessResponse
Request validation failed
Schema: ValidationErrorResponse
Invalid or missing API key
Schema: ErrorResponse
Missing required permission
Schema: ErrorResponse
Rate limit exceeded
Schema: ErrorResponse
Internal server error
Schema: ErrorResponse
Response examples
201 Example JSONWritingStyleSuccessResponse
{
"success": true,
"data": {
"id": "507f1f77bcf86cd799439011",
"name": "Avery Stone",
"description": "string",
"contentType": "direct_message",
"basicOnly": true,
"samples": [
{
"type": "signal",
"message": "Thanks for the context. I can send over details this afternoon.",
"subject": "Quick follow-up",
"signalTag": "string"
}
],
"includeRules": [
"string"
],
"excludeRules": [
"string"
],
"createdAt": "2026-04-28T15:30:00.000Z"
},
"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"
}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"
}