businesses

Create business

Create a new business in your organization.

Send an Idempotency-Key header to make a retry safe (a resend with the same key returns the original business instead of creating a duplicate).

Errors: 401 authentication_required: API key or token is missing, invalid, or revoked. 403 permission_denied: Your plan does not include API access. 403 WORKSPACE_LIMIT_EXCEEDED: You hit your plan's workspace limit. Carries an upgrade_url (one-click "add a workspace" screen) and workspace_limit. 422 IDEMPOTENCY_KEY_CONFLICT: The Idempotency-Key was reused with a different body. 429 rate_limit_exceeded: You sent too many requests this minute.

post/api/businesses

Request

  • Base URL: https://api.mymarky.ai
  • URL: https://api.mymarky.ai/api/businesses
  • Auth: HTTP bearer

Headers

Idempotency-Keystring nullable

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'2026-04-08' | '2026-07-17' | '2026-08-02' | '2026-08-04' | '2026-08-06'
Example:2026-08-06

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.

Request body

tonestring nullable

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

audience_combinedstring nullable

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

caption_writing_rulesstring nullable

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_suffixstring nullable

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

custom_caption_promptstring nullable

A custom instruction injected into caption generation for this business.

custom_meme_promptstring nullable

A custom instruction injected into meme generation for this business.

custom_carousel_promptstring nullable

A custom instruction injected into carousel generation for this business.

design_stylestring nullable

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_urlstring nullable

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.

strategystring nullable

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.

taglinestring nullable

Brand tagline shown on designs.

ctasstring[] nullable

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

logo_urlstring nullable

URL of the brand logo.

logo_background_colorstring nullable

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

logo_widthinteger nullable

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

namestring required

Business name

descriptionstring nullable

Business description

industrystring nullable

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

websitestring nullable

Business website URL

languagestring

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

Response

Successful Response

tonestring nullable

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

audience_combinedstring nullable

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

caption_writing_rulesstring nullable

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_suffixstring nullable

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

custom_caption_promptstring nullable

A custom instruction injected into caption generation for this business.

custom_meme_promptstring nullable

A custom instruction injected into meme generation for this business.

custom_carousel_promptstring nullable

A custom instruction injected into carousel generation for this business.

design_stylestring nullable

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_urlstring nullable

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.

strategystring nullable

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.

taglinestring nullable

Brand tagline shown on designs.

ctasstring[] nullable

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

logo_urlstring nullable

URL of the brand logo.

logo_background_colorstring nullable

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

logo_widthinteger nullable

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

idstring required

Business ID

namestring nullable

Business name

descriptionstring nullable

Business description

industrystring nullable

Industry category

websitestring nullable

Business website URL

languagestring

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

platform_writing_instructionsobject nullable

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.

include_stockboolean

Whether generated posts may use stock photos. True when never set, because stock is allowed by default. Set with update_business.

aspect_ratiostring nullable

Default aspect ratio for generated designs ('1:1', '4:5' or '9:16'). Null when never set. Set with update_business.

creative_typesobject

Stored content-mix weights per creative format (keys: design, image-only, ai-image, gif, meme, video, carousel). Empty when never set, and generation then uses the default mix. Set with update_business.

timezonestring nullable

The business's IANA timezone (e.g. 'Europe/Warsaw'). Posting-schedule slots and *_local times use it, and holidays in moments come from its country. Null when unset: times are then UTC and holidays default to the US. Set with update_business.

created_atstring required

When the business was created

updated_atstring nullable

Last update time

revision_idstring nullable

Id of the undo record this write created. Pass it to revert_revisions to put the record back exactly as it was before this call. Set only on the response to a write; null when you read the record.

Changes

No recorded changes to this operation across all 1 revision of this API.