Menu

API reference · Ad Creator

Copies

ad_creator · copies · 4 operations

GET/v1/ad-creator/copies

List ad copies

ad_creator.copies.list

ReadIdempotentSince 2026-11-01

Lists the organization's Ad Creator ad copies (sets of AI-written ad texts for one product or service), newest first, paginated by cursor (limit up to 200). Each item is a summary: name, product description, platforms (google_search, meta_ads, linkedin_ads, tiktok_ads), tone or custom tone, variants requested per platform (variant_count), how many variants were generated in total (generated_variant_count), status and credits spent. The variants themselves come with ad_creator.copies.get. Requires view access to the Ad Creator.

Scope
ad_creator:read
Permission
View the module
MCP tool
ad_creator_copies_listOn the full surface; on the compact one, mb_execute_operation with id: "ad_creator.copies.list".

Declared cost: up to 202 reads and 0 writes per call (they count against the daily quota).

Parameters

limitintegerqueryoptional

How many items this page brings at most (see the maximum and the default in the schema).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/ad-creator/copies" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/ad-creator/copies" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/ad-creator/copies/{copy_id}

Get one ad copy

ad_creator.copies.get

ReadIdempotentSince 2026-11-01

Returns one ad copy set with its brief (product description, key benefits, CTA direction, landing page, tone) and every generated variant, grouped by platform through each variant's platform and variant_index. A google_search variant has up to 15 headlines (30 characters each) and 4 descriptions (90 characters each); a meta_ads, linkedin_ads or tiktok_ads variant has primary_text, headline, description and, for Meta, a cta_suggestion. The texts are written to fit each platform's character limits, but the AI can exceed them: check lengths before publishing. Not found for an id of another organization. Requires view access to the Ad Creator.

Scope
ad_creator:read
Permission
View the module
MCP tool
ad_creator_copies_getOn the full surface; on the compact one, mb_execute_operation with id: "ad_creator.copies.get".

Declared cost: up to 1 reads and 0 writes per call (they count against the daily quota).

Parameters

copy_idstringpathrequired

Ad copy id (from ad_creator.copies.list; the same id as in the Ad Creator URL).

Response

idstring

Ad copy id.

namestring

Name in the Ad Creator list.

product_descriptionstring

What is advertised (the brief).

platformsarray<string>

Platforms it was written for.

variantsarray<object>

The generated variants.

statusstring

Generation status.

created_atnumber

Epoch ms.

tonestring | null

Writing tone.

custom_tonestring | null

Free-form tone, when one was given.

variant_countnumber | null

Variants asked per platform.

key_benefitsstring | null

Benefits to highlight.

cta_directionstring | null

What the call to action asks for.

landing_page_urlstring | null

Landing page (for reference).

landing_page_contextstring | null

Extra context about the landing page.

total_credits_consumednumber | null

AI credits it consumed.

created_bystring | null

Who generated it (uid).

created_by_namestring | null

That person's name (null when MB Suite does not know it: a former member).

updated_atnumber | null

Epoch ms.

Errors

Example

curl "https://api.mb-suite.com/v1/ad-creator/copies/{copy_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/ad-creator/copies/{copy_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/ad-creator/copies

Generate ad copies (AI)

ad_creator.copies.generate

WriteSince 2026-11-01

Writes ad copy with AI for one product or service and saves it as a new copy set in the Ad Creator: variant_count variants (1 to 10, default 3) for each requested platform. google_search gets responsive search ad headlines and descriptions; meta_ads, linkedin_ads and tiktok_ads get primary text, headline and description. The AI uses product_description plus the optional key_benefits, cta_direction and landing_page_context, in the given tone (or custom_tone); landing_page_url is only stored. Costs 1 AI credit per call, charged before generating: with no credits left (or the Chat budget or the caller's monthly limit used up) it fails with 402 ai_credits_exhausted and nothing is created; if the AI fails, the credit is refunded and nothing is saved (502 ai_generation_failed, safe to retry). Takes a few seconds, up to about 30 with many variants. Not idempotent: send an Idempotency-Key to retry safely. Nothing is published to the ad platforms. Returns the new copy (same shape as ad_creator.copies.get) and emits ad_creator.copy.generated. Requires edit access to the Ad Creator.

Instructions for agents

Show the person the variants grouped by platform and point out any text that exceeds its platform's character limit before they use it.

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
ad_creator:write
Permission
Edit in the module
MCP tool
ad_creator_copies_generateOn the full surface; on the compact one, mb_execute_operation with id: "ad_creator.copies.generate".
Events it can emit
ad_creator.copy.generated

Declared cost: up to 8 reads and 4 writes per call (they count against the daily quota). Touches an external platform (ai): it counts against the external operations quota.

Parameters

product_descriptionstringbodyrequired

What is being advertised: product or service, audience, offer. The main input of the generator.

platformsarray<enum>bodyrequired

Ad platforms to write for: google_search (responsive search ads), meta_ads, linkedin_ads, tiktok_ads.

Values: google_search, meta_ads, linkedin_ads, tiktok_ads

namestringbodyoptional

Name shown in the Ad Creator list. Default: the first 60 characters of product_description.

toneenumbodyoptional

Writing tone. Ignored when custom_tone is given.

Values: professional, casual, urgent, aspirational, informational · Default: "professional"

custom_tonestringbodyoptional

Free-form tone description; when present it replaces tone.

variant_countintegerbodyoptional

Variants per platform (1 to 10).

Default: 3

key_benefitsstringbodyoptional

Benefits to highlight.

cta_directionstringbodyoptional

What the call to action should ask for.

landing_page_urlstringbodyoptional

Landing page URL, stored for reference (it is not visited).

landing_page_contextstringbodyoptional

Text about the landing page to give the generator more context.

Response

copy_idstring

The new ad copy's id.

copyobject

The ad copy with its variants.

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/ad-creator/copies" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_description": "PRODUCT_DESCRIPTION",
  "platforms": [
    "google_search"
  ],
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset. In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.

DELETE/v1/ad-creator/copies/{copy_id}

Delete an ad copy

ad_creator.copies.delete

IrreversibleSince 2026-11-01

Deletes an ad copy set with all its variants. It goes to the 30-day trash, where an owner or admin can restore it whole (platform.trash.restore). Outside the app it needs a dry run and a confirm_token, except a REST DELETE with a key allowed to delete. Emits ad_creator.copy.deleted. Not found for an id of another organization. Requires edit access to the Ad Creator.

With an API key, this DELETE runs directly: the record stays 30 days in the trash and the response carries its trash_item_id. With an OAuth token, and through the MCP, it needs dry_run → confirm_token.

Scope
ad_creator:write and “Allow deletions” (ad_creator:delete in OAuth)
Permission
Edit in the module
MCP tool
ad_creator_copies_deleteOn the full surface; on the compact one, mb_execute_operation with id: "ad_creator.copies.delete".
Events it can emit
ad_creator.copy.deleted

Declared cost: up to 1 reads and 2 writes per call (they count against the daily quota).

Parameters

copy_idstringpathrequired

Ad copy id (from ad_creator.copies.list; the same id as in the Ad Creator URL).

Response

oktrue
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errors

Example

curl -X DELETE "https://api.mb-suite.com/v1/ad-creator/copies/{copy_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X DELETE "https://api.mb-suite.com/v1/ad-creator/copies/{copy_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"