Changes to the REST API are listed here, newest first. Anything that can break an existing integration is marked Breaking and says what to do about it.

This page is the only place API changes are announced. Bookmark it, or watch it through your usual docs reader, before relying on behaviour that is not documented in the reference.

4 November 2026 — Studio designs

New endpoints

EndpointWhat it does
GET /studio-designsLists the brand’s own designs saved in Studio, newest first. Takes brandId, and optionally query, page and perPage.
GET /studio-designs/{designId}Returns one design with its fields: each text, image and colour layer with its id, label, type and current value. Takes brandId.
POST /studio-designs/{designId}/renderRenders the design as a PNG with the values in fields and returns its url. Takes brandId. The saved design is not changed.

New parameters

POST /post/ai and POST /campaigns take studioDesignId and studioDesignFields. With a design, each post’s image is that design, with its text layers written by the AI from the caption, instead of an AI-generated image. Any other layer changes only when it is set in studioDesignFields.

GET /studio-templates is unchanged: it lists Ocoya’s public template gallery, not the brand’s own designs.

3 November 2026 — Campaigns and brand profiles; hashtag libraries removed

New endpoints

EndpointWhat it does
GET /campaignsLists a brand’s AI campaigns, newest first, with status and generation progress. Takes brandId, and optionally status, page and perPage.
GET /campaigns/{campaignId}Returns one campaign with its posts: caption preview, date, and, once saved, postGroupId and post status. Takes brandId.
GET /brands/{brandId}Returns the brand profile: description, website, logos, colors, fonts, tone of voice, guidelines, SEO keywords with monthly searches, hashtags, and the brand score with its suggested next step.
PATCH /brands/{brandId}Changes the brand’s description, url, tone, guidelines, keywords, hashtags or colors. Brand owners and admins only.

GET /brands now also returns each brand’s image, timezone, website url and brand score.

Breaking: hashtag libraries are gone from the API

Brands now keep their own hashtags (Brand → Hashtags), and AI campaigns use them.

  • GET /hashtag-libraries is removed.
  • hashtagLibraryId is no longer accepted by POST /post/ai and POST /campaigns. It is ignored if sent, so existing calls keep working.

What you need to change

Stop calling GET /hashtag-libraries. To control the hashtags AI uses, read them with GET /brands/{brandId} and set them with PATCH /brands/{brandId}.

The MCP server changed the same way: ocoya_list_campaigns, ocoya_get_campaign and ocoya_update_brand are new, ocoya_get_brand returns the full profile, and ocoya_list_hashtag_libraries is removed. ocoya_update_brand needs the new brand:write scope, so reconnect the client to use it.

30 October 2026 — Social profiles are now channels

A connected account, page or database is called a channel everywhere in Ocoya, so the API and the MCP server now use the same word. Nothing breaks: the old names keep working, and responses carry both names until further notice.

Endpoints

BeforeNow
GET /social-profilesGET /channels
POST /social-profiles/connection-urlPOST /channels/connection-url

Fields

BeforeNow
socialProfileIdschannelIds
addSocialProfileIdsaddChannelIds
socialProfileIdchannelId
socialProfiles on a postchannels, a plain list of id, provider, name and image
socialProfile on a workflow stepchannel

MCP

BeforeNow
ocoya_list_social_profilesocoya_list_channels
ocoya_get_social_profileocoya_get_channel
ocoya_generate_social_connection_urlocoya_generate_channel_connection_url
social_profiles:read scopechannels:read

If a request sends both names, the old one wins.

1 September 2026 — Workspaces are now brands

Breaking. The old names were removed rather than deprecated, so requests using them fail rather than falling back.

What Ocoya calls a workspace in the product has always been called a brand in the interface. The API now uses the same word.

Endpoints

BeforeNow
GET /workspacesGET /brands
GET /brand-kitsRemoved

Parameters

The workspaceId query parameter is now brandId, on every endpoint that took it — /social-profiles, /post, /post/ai, /campaigns, /hashtag-libraries, /studio-templates and /analytics/export.

What you need to change

Rename the parameter. The values are unchanged: a brand ID is the same identifier you were already passing as a workspace ID, so nothing needs to be re-fetched or re-mapped.

curl "https://www.app.ocoya.com/api/_public/v1/post?workspaceId=cmayvq3hk00017apshay5qezu" \
  -H "X-API-Key: $OCOYA_API_KEY"
curl "https://www.app.ocoya.com/api/_public/v1/post?brandId=cmayvq3hk00017apshay5qezu" \
  -H "X-API-Key: $OCOYA_API_KEY"

If you were reading brand kits through GET /brand-kits, that endpoint is gone. Saved hashtag context was then available from GET /hashtag-libraries, removed on 3 November 2026 (see above).