businesses

Update business

Update a business. Only provided fields are changed.

Changing caption_suffix, website or logo_url does not rewrite posts that are already made. propagation says how many unpublished posts still carry the old value and, for text, gives the update_posts call that fixes them.

Errors: 400 invalid_request: No fields were given to update. 400 invalid_value: The business_id is not a valid UUID. 401 authentication_required: API key or token is missing, invalid, or revoked. 403 permission_denied: Your plan does not include API access, or this business is not in your org. 404 resource_not_found: No business with that ID exists. 409 NAME_MATCHES_OTHER_WORKSPACE: Another business in your org already has that name. Nothing was saved. Send allow_duplicate_name=true to rename anyway. 429 rate_limit_exceeded: You sent too many requests this minute.

patch/api/businesses/{business_id}

Request

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

Path parameters

business_idstring required

A UUID identifier.

Headers

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 nullable

Business name

descriptionstring nullable

Business description

industrystring nullable

Industry

websitestring nullable

Business website URL

languagestring nullable

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

include_stockboolean nullable

Whether generated posts may use stock photography.

aspect_ratio'1:1' | '4:5' | '9:16' nullable

Default aspect ratio for generated designs.

timezonestring nullable

The business's IANA timezone, e.g. 'Europe/Warsaw'. Posting-schedule slots and every *_local time use it, and holidays in moments come from its country. Existing schedule slots keep the moment they publish at; re-send the posting schedule to set slots on the new clock.

failed_to_publish_enabledboolean nullable

Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.

low_scheduled_enabledboolean nullable

Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.

post_published_enabledboolean nullable

Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.

post_stats_digest_enabledboolean nullable

Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.

allow_duplicate_nameboolean

Set true to rename this business to a name another business in your org already has. Without it that rename is refused with 409 NAME_MATCHES_OTHER_WORKSPACE, because it usually means the content belongs in that other business instead.

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.