PATCH
https://www.app.ocoya.com/api/_public/v1/brands/{brandId}
Update a brand
curl --request PATCH \
  --url https://www.app.ocoya.com/api/_public/v1/brands/{brandId} \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "description": "Ocoya helps small teams plan, create and schedule social posts with AI.",
  "url": "ocoya.com",
  "tone": [
    "Friendly",
    "Expert"
  ],
  "guidelines": "Never use exclamation marks.",
  "keywords": [
    "social media scheduler",
    "ai captions"
  ],
  "hashtags": [
    "#socialmedia",
    "smallbusiness"
  ],
  "colors": [
    "#1a1a1a",
    "#ff6b35"
  ]
}
'
{
  "id": "cmayvq3hk00017apshay5qezu",
  "name": "Ocoya",
  "image": null,
  "timezone": "Europe/London",
  "weekStart": 1,
  "description": "Ocoya helps small teams plan, create and schedule social posts with AI.",
  "url": "https://www.ocoya.com",
  "logos": [
    "https://cdn.ocoya.com/prod/brand/logo.png"
  ],
  "colors": [
    "#1a1a1a",
    "#ff6b35"
  ],
  "fonts": {
    "heading": {
      "fontFamily": "Actor"
    }
  },
  "socials": {
    "instagram": "https://instagram.com/ocoya"
  },
  "tone": [
    "Friendly",
    "Expert"
  ],
  "guidelines": "Never use exclamation marks.",
  "keywords": [
    {
      "keyword": "social media scheduler",
      "monthlySearches": 1900
    }
  ],
  "hashtags": [
    "socialmedia",
    "smallbusiness"
  ],
  "channelCount": 3,
  "score": {
    "score": 75,
    "nextStep": {
      "section": "keywords",
      "sectionLabel": "SEO keywords",
      "label": "Find more SEO keywords",
      "points": 5
    }
  }
}

Authorizations

X-API-Keystringheaderrequired

Your API key. Create one in Ocoya. Authorization: Bearer <key> works too.

Path Parameters

brandIdstringrequired

Ocoya brand ID. Get one from GET /brands.

Example:"cmayvq3hk00017apshay5qezu"

Body

application/json

Only the fields you send change. Send at least one.

descriptionstring

What the brand does.

Example:
"Ocoya helps small teams plan, create and schedule social posts with AI."
urlstring | null

Website. Normalised as the app does (ocoya.com becomes https://ocoya.com); an empty string or null clears it.

Example:"ocoya.com"
toneenum<string>[]

Up to 3 tones, replacing the current ones.

Available options: Friendly, Professional, Playful, Warm, Bold, Witty, Inspiring, Calm, Expert, Casual
Maximum array length: 3
Example:
[
  "Friendly",
  "Expert"
]
guidelinesstring | null

Extra writing guidelines, up to 2000 characters.

Maximum string length: 2000
Example:"Never use exclamation marks."
keywordsstring[]

SEO keywords, replacing the current ones: up to 20, lowercased and de-duplicated. Search volumes are kept for keywords that stay.

Example:
[
  "social media scheduler",
  "ai captions"
]
hashtagsstring[]

Hashtags, replacing the current ones: up to 200, stored lowercase without # (#Small Business becomes smallbusiness).

Example:
[
  "#socialmedia",
  "smallbusiness"
]
colorsstring[]

Brand colors as hex values, replacing the current ones: up to 8.

Maximum array length: 8
Example:
[
  "#1a1a1a",
  "#ff6b35"
]

Response

application/json

Success. The updated profile.

idstring

Brand ID.

Example:"cmayvq3hk00017apshay5qezu"
namestring | null

Brand name.

Example:"Ocoya"
imagestring | null

Brand avatar URL.

timezonestring | null

Brand timezone.

Example:"Europe/London"
weekStartinteger | null

First day of the week in the calendar (0 is Sunday).

Example:1
descriptionstring

What the brand does, as AI writing reads it.

Example:
"Ocoya helps small teams plan, create and schedule social posts with AI."
urlstring

Website, or an empty string.

Example:"https://www.ocoya.com"
logosstring[]

Logo image URLs.

Example:
[
  "https://cdn.ocoya.com/prod/brand/logo.png"
]
colorsstring[]

Brand colors as hex values.

Example:
[
  "#1a1a1a",
  "#ff6b35"
]
fontsobject

Heading and body fonts used for designs.

Example:
{
  "heading": {
    "fontFamily": "Actor"
  }
}
socialsobject

Social profile links, by network.

Example:
{
  "instagram": "https://instagram.com/ocoya"
}
toneenum<string>[]

Tone of voice: up to 3 of Friendly, Professional, Playful, Warm, Bold, Witty, Inspiring, Calm, Expert, Casual.

Available options: Friendly, Professional, Playful, Warm, Bold, Witty, Inspiring, Calm, Expert, Casual
Example:
[
  "Friendly",
  "Expert"
]
guidelinesstring

Extra writing guidelines every AI prompt follows.

Example:"Never use exclamation marks."
keywordsobject[]

SEO keywords the brand wants to be found for, up to 20.

Show child attributesHide child attributes
keywords.keywordstring
Example:"social media scheduler"
keywords.monthlySearchesinteger | null

Monthly searches, where keyword detection found a number; null for a keyword typed in.

Example:1900
hashtagsstring[]

Hashtags the brand's posts use, lowercase and without the #, up to 200. AI campaigns use them.

Example:
[
  "socialmedia",
  "smallbusiness"
]
channelCountinteger

Connected channels and stores, as the score counts them.

Example:3
scoreobject
Show child attributesHide child attributes
score.scoreinteger

How complete the brand profile is, out of 100: the same score the app shows on the Brand page.

Example:75
score.nextStepobject | null

The step worth the most points, or null at 100.

Show child attributesHide child attributes
score.nextStep.sectionenum<string>

Brand page section to work on.

Available options: channels, website, details, voice, logos, colors, keywords, hashtags
Example:"keywords"
score.nextStep.sectionLabelstring

That section's name in the app.

Example:"SEO keywords"
score.nextStep.labelstring

The suggested next step, as the app words it.

Example:"Find more SEO keywords"
score.nextStep.pointsinteger

Points the step can still add.

Example:5