Skip to main content
POST
Create business

Authorizations

Authorization
string
header
required

Bearer an mk_live_ API key. A key is ORG-SCOPED: it grants full access to every resource in that organization, with no per-endpoint scoping (see the uid pseudo-permission on each operation). Manage keys at https://app.mymarky.ai.

Headers

Idempotency-Key
string | null

Optional. Send a unique value (e.g. a UUID) to make this create request safe to retry. A repeat with the same key returns the original response instead of creating a duplicate. Cached for 24h, scoped to your org. Reusing a key with a different body returns 422.

Marky-Version
enum<string>

Opt into a dated API version. Omit to stay on the floor (2026-04-08) forever — unpinned clients never break. Pin to a newer date (e.g. 2026-08-06) to receive the newest response shapes. Unknown values fall back to the floor. See https://docs.mymarky.ai for the versioning model.

Available options:
2026-04-08,
2026-07-17,
2026-08-02,
2026-08-04,
2026-08-06
Example:

"2026-08-06"

Body

application/json
name
string
required

Business name

tone
string | null

Brand voice — the tone and personality Marky writes captions in (the 'Profile' field in the app).

audience_combined
string | null

The target audience the brand writes for — who the posts are meant to reach (the 'Target Audience' field in the app).

caption_writing_rules
string | null

Extra rules Marky follows when writing captions. Put each rule on its own line (newline-separated) — do NOT write one long paragraph. The app shows each line as a separate rule chip, so a run-on paragraph renders as one un-editable blob. E.g. 'Never use emojis\nAlways end with a question\nKeep captions under 80 words'.

caption_suffix
string | null

Text appended to the end of every generated caption (e.g. a hashtag block or a link).

custom_caption_prompt
string | null

A custom instruction injected into caption generation for this business.

custom_meme_prompt
string | null

A custom instruction injected into meme generation for this business.

A custom instruction injected into carousel generation for this business.

design_style
string | null

Free-text/markdown guidance on how this brand's graphics should be COMPOSED — which palette colour leads, how gradients are used, where the logo sits, whitespace, type treatment. Do NOT restate the raw brand tokens here (colours, fonts, logo file); those live in palettes / header_font / body_font / logo_url. This is the judgement the tokens can't express. SCOPE: it is added to the prompt for AI-GENERATED images and sets the look of theme covers. It does NOT reach a template design, so it will not change a batch generated from templates — for those, use palettes / header_font / body_font / logo_url, creative_types and include_stock. SIZE: 5000 characters, and writing this field REPLACES the whole value. Plan to the cap before composing; the response's field_budgets entry tells you how much room is left.

brand_style_grid_url
string | null

URL of a rendered 2x2 grid of four sample posts, all in ONE of the treatments from the design_style table — the first look the user kept when they ran /brand-setup. Written by /brand-setup at the end of that run; the app shows it so someone can SEE their look instead of reading it.

strategy
string | null

Social strategy doc as MARKDOWN — the goal we're working toward, what we're trying right now, what we won't do, cadence and mix, plus a running log of experiments and what we learned. This is the layer an agency revisits each quarter. Write plain markdown (## headings, - bullets, | tables |); the app renders it in a rich-text editor, so no HTML tags — they show up as literal text and spend the size budget without adding meaning. Keep the pillars themselves in topics, the brand voice in tone/audience_combined, and how graphics look in design_style; strategy holds what none of those can express — what we're trying to ACHIEVE and what we've learned. SIZE: 6000 characters, and writing this field REPLACES the whole doc. A longer value is still saved, but it comes back with a warning you have to act on in the same turn — so plan the doc to the cap BEFORE you compose it, rather than writing long and compacting after. The response's field_budgets entry for this field tells you exactly how much room is left.

tagline
string | null

Brand tagline shown on designs.

ctas
string[] | null

Call-to-action phrases Marky can use on designs (e.g. 'Call today', 'Book now').

palettes
Palette · object[] | null

Brand color palettes used on generated designs.

header_font
FontSetting · object | null

Font used for headlines on designs.

body_font
FontSetting · object | null

Font used for body text on designs.

logo_url
string | null

URL of the brand logo.

logo_background_color
string | null

Background color behind the logo on designs (hex, or '#00000000' for transparent).

logo_width
integer<int32> | null

Logo width in pixels, used when laying the logo onto designs.

description
string | null

Business description

industry
string | null

Industry (e.g. 'Real Estate', 'Marketing Agency')

website
string | null

Business website URL

language
string
default:English

Content language, as an ISO 639-1 code (e.g. 'en') or English name (e.g. 'English'). Both accepted.

Response

Successful Response

id
string
required

Business ID

created_at
string
required

When the business was created

warnings
FieldWarning · object[]
required
read-only

Non-blocking notes about fields that need attention, empty when there is nothing to do. Act on them in the same turn you see them — that is while you still have the content in context.

field_budgets
FieldBudget · object[]
required
read-only

Size ceilings for the fields that get pasted into the prompt for every generated post. READ THIS BEFORE COMPOSING a value for one of these fields — remaining is the room you have, and a budgeted field is REPLACED whole on write, so limit is the real target. Over-budget writes are accepted, not rejected, but they cost a full rewrite to fix.

tone
string | null

Brand voice — the tone and personality Marky writes captions in (the 'Profile' field in the app).

audience_combined
string | null

The target audience the brand writes for — who the posts are meant to reach (the 'Target Audience' field in the app).

caption_writing_rules
string | null

Extra rules Marky follows when writing captions. Put each rule on its own line (newline-separated) — do NOT write one long paragraph. The app shows each line as a separate rule chip, so a run-on paragraph renders as one un-editable blob. E.g. 'Never use emojis\nAlways end with a question\nKeep captions under 80 words'.

caption_suffix
string | null

Text appended to the end of every generated caption (e.g. a hashtag block or a link).

custom_caption_prompt
string | null

A custom instruction injected into caption generation for this business.

custom_meme_prompt
string | null

A custom instruction injected into meme generation for this business.

A custom instruction injected into carousel generation for this business.

design_style
string | null

Free-text/markdown guidance on how this brand's graphics should be COMPOSED — which palette colour leads, how gradients are used, where the logo sits, whitespace, type treatment. Do NOT restate the raw brand tokens here (colours, fonts, logo file); those live in palettes / header_font / body_font / logo_url. This is the judgement the tokens can't express. SCOPE: it is added to the prompt for AI-GENERATED images and sets the look of theme covers. It does NOT reach a template design, so it will not change a batch generated from templates — for those, use palettes / header_font / body_font / logo_url, creative_types and include_stock. SIZE: 5000 characters, and writing this field REPLACES the whole value. Plan to the cap before composing; the response's field_budgets entry tells you how much room is left.

brand_style_grid_url
string | null

URL of a rendered 2x2 grid of four sample posts, all in ONE of the treatments from the design_style table — the first look the user kept when they ran /brand-setup. Written by /brand-setup at the end of that run; the app shows it so someone can SEE their look instead of reading it.

strategy
string | null

Social strategy doc as MARKDOWN — the goal we're working toward, what we're trying right now, what we won't do, cadence and mix, plus a running log of experiments and what we learned. This is the layer an agency revisits each quarter. Write plain markdown (## headings, - bullets, | tables |); the app renders it in a rich-text editor, so no HTML tags — they show up as literal text and spend the size budget without adding meaning. Keep the pillars themselves in topics, the brand voice in tone/audience_combined, and how graphics look in design_style; strategy holds what none of those can express — what we're trying to ACHIEVE and what we've learned. SIZE: 6000 characters, and writing this field REPLACES the whole doc. A longer value is still saved, but it comes back with a warning you have to act on in the same turn — so plan the doc to the cap BEFORE you compose it, rather than writing long and compacting after. The response's field_budgets entry for this field tells you exactly how much room is left.

tagline
string | null

Brand tagline shown on designs.

ctas
string[] | null

Call-to-action phrases Marky can use on designs (e.g. 'Call today', 'Book now').

palettes
Palette · object[] | null

Brand color palettes used on generated designs.

header_font
FontSetting · object | null

Font used for headlines on designs.

body_font
FontSetting · object | null

Font used for body text on designs.

logo_url
string | null

URL of the brand logo.

logo_background_color
string | null

Background color behind the logo on designs (hex, or '#00000000' for transparent).

logo_width
integer<int32> | null

Logo width in pixels, used when laying the logo onto designs.

name
string | null

Business name

description
string | null

Business description

industry
string | null

Industry category

website
string | null

Business website URL

language
string
default:en

Content language as an ISO 639-1 code (e.g. 'en', 'fr', 'es').

platform_writing_instructions
Platform Writing Instructions · object | null

The user's customized per-platform caption-writing instructions (empty when none set). Keys are canonical platform names (e.g. 'instagram', 'linkedIn') plus 'common' (applies to all platforms). Follow the matching entry when writing a caption or platform_overrides caption — the user's instructions ALWAYS outrank generic platform best practices. Update via PATCH (merge semantics). Returned by get_business only, not the list endpoint.

updated_at
string | null

Last update time