Get writing style
One writing style’s full configuration: tone of voice, writing rules, heading case, translation
formality, competitor-statistics mode, English spelling variant, and (for social styles)
per-language overrides. Get style_id from List writing styles.
GET /brands/{brand_id}/writing-styles/{style_id}Authorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
style_id | uuid | required | From List writing styles |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/writing-styles/3c9fe109-0a5f-4c1e-9b2d-6a8e1f3c7b5d' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": {
"id": "3c9fe109-0a5f-4c1e-9b2d-6a8e1f3c7b5d",
"name": "Reddit Casual",
"surface": "social",
"channel": "reddit",
"is_default": true,
"sort_order": 0,
"tone_of_voice": {
"presets": ["friendly", "direct"],
"custom_tones": [],
"description": "Talks like a knowledgeable peer, not a brand account."
},
"writing_rules": {
"always_do": ["Answer the question first, mention the product only if directly relevant"],
"never_do": ["Never use marketing language", "Never post more than one link"]
},
"heading_case_style": "sentence",
"translation_formality": null,
"competitor_statistics_mode": null,
"english_variant": null,
"language_overrides": {
"de": {
"formality": "prefer_more",
"nuance": "Use Sie, keep it professional even in casual threads.",
"always_do": ["Use Sie"],
"never_do": [],
"english_variant": null
}
},
"tone_generation_status": null,
"created_at": "2026-07-22T14:30:00.000Z",
"updated_at": "2026-08-11T21:42:29.000Z"
},
"request_id": "req_839eabb939bd4d32851a"
}Response fields
| Field | Type | Description |
|---|---|---|
data.id | uuid | required |
data.name | string | required |
data.surface | string | required. One of content, social |
data.channel | string | null | The social channel, when surface is social |
data.is_default | boolean | required |
data.sort_order | integer | required |
data.tone_of_voice | object | required. { presets: string[], custom_tones: string[], description: string } |
data.writing_rules | object | required. { always_do: string[], never_do: string[] } |
data.heading_case_style | string | required. One of sentence, title. Content styles only in practice |
data.translation_formality | string | null | One of default, prefer_more, prefer_less. Content styles only |
data.competitor_statistics_mode | string | null | One of ask, include, exclude. Content styles only |
data.english_variant | string | null | One of us, uk. Content styles only — a social style’s English spelling preference lives in language_overrides.en.english_variant instead |
data.language_overrides | object | required. Keyed by ISO 639-1 language code. {} on content styles, since it is never read there. Each value is { formality, nuance, always_do, never_do, english_variant } |
data.tone_generation_status | string | null | pending while an AI-assisted tone is still being generated, failed if it errored, otherwise null |
data.created_at / data.updated_at | timestamptz | required |
request_id | string | required. Also returned as the x-request-id header. Quote it when contacting support |
Errors
| Status | Code | When |
|---|---|---|
| 401 | invalid_token | The key is missing, malformed, or does not exist |
| 401 | token_expired | The key passed its expiry date |
| 401 | token_revoked | The key was revoked |
| 404 | not_found | The brand does not exist, the style does not exist for this brand, or this key is not allowed to reach either. All three are deliberately indistinguishable |
| 429 | rate_limited | Over 300 requests per minute. See the Retry-After header |
Notes
heading_case_style, translation_formality, competitor_statistics_mode and english_variant
are article-only fields. They still appear on a social style’s response (at their column
defaults), but nothing reads them there — the editor hides all four for social styles, and
Update writing style refuses to set any of them on one.
language_overrides is the mirror case: populated and meaningful only on social styles.
Content generation never reads it.
A social style’s spelling preference lives inside language_overrides.en, not the base
english_variant column. The base column is what content styles use.