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.
Request
- Base URL: https://api.mymarky.ai
- URL: https://api.mymarky.ai/api/businesses/{business_id}
- Auth: HTTP bearer
Path parameters
A UUID identifier.
Headers
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
Brand voice — the tone and personality Marky writes captions in (the 'Profile' field in the app).
The target audience the brand writes for — who the posts are meant to reach (the 'Target Audience' field in the app).
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'.
Text appended to the end of every generated caption (e.g. a hashtag block or a link).
A custom instruction injected into caption generation for this business.
A custom instruction injected into meme generation for this business.
A custom instruction injected into carousel generation for this business.
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.
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.
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.
Brand tagline shown on designs.
Call-to-action phrases Marky can use on designs (e.g. 'Call today', 'Book now').
URL of the brand logo.
Background color behind the logo on designs (hex, or '#00000000' for transparent).
Logo width in pixels, used when laying the logo onto designs.
Business name
Business description
Industry
Business website URL
Content language, as an ISO 639-1 code (e.g. 'en') or English name (e.g. 'English'). Both accepted.
Whether generated posts may use stock photography.
Default aspect ratio for generated designs.
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.
Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.
Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.
Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.
Deprecated: has no effect. Email notifications are set per user, in the app under Account > Notifications, not per business.
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
Brand voice — the tone and personality Marky writes captions in (the 'Profile' field in the app).
The target audience the brand writes for — who the posts are meant to reach (the 'Target Audience' field in the app).
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'.
Text appended to the end of every generated caption (e.g. a hashtag block or a link).
A custom instruction injected into caption generation for this business.
A custom instruction injected into meme generation for this business.
A custom instruction injected into carousel generation for this business.
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.
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.
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.
Brand tagline shown on designs.
Call-to-action phrases Marky can use on designs (e.g. 'Call today', 'Book now').
URL of the brand logo.
Background color behind the logo on designs (hex, or '#00000000' for transparent).
Logo width in pixels, used when laying the logo onto designs.
Business ID
Business name
Business description
Industry category
Business website URL
Content language as an ISO 639-1 code (e.g. 'en', 'fr', 'es').
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.
Whether generated posts may use stock photos. True when never set, because stock is allowed by default. Set with update_business.
Default aspect ratio for generated designs ('1:1', '4:5' or '9:16'). Null when never set. Set with update_business.
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.
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.
When the business was created
Last update time
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.