GET
https://www.app.ocoya.com/api/_public/v1/seo/{postId}
Get SEO post
curl --request GET \
  --url https://www.app.ocoya.com/api/_public/v1/seo/{postId} \
  --header 'X-API-Key: <api-key>'
{
  "id": "cmajvvb9q0003ja5vh0538j6r",
  "brandId": "cmayvq3hk00017apshay5qezu",
  "type": "<string>",
  "status": "DRAFT",
  "scheduledAt": "2024-01-01T00:00:00Z",
  "createdAt": "2024-01-01T00:00:00Z",
  "updatedAt": "2024-01-01T00:00:00Z",
  "campaignId": "<string>",
  "title": "How to plan a content calendar in one afternoon",
  "slug": "how-to-plan-a-content-calendar-in-one-afternoon",
  "excerpt": "<string>",
  "seoTitle": "<string>",
  "metaDescription": "<string>",
  "keyword": "<string>",
  "tags": [
    "<string>"
  ],
  "readingMinutes": 6,
  "thumbnail": {
    "url": "<string>",
    "width": 123,
    "height": 123
  },
  "channels": [
    {
      "id": "clh49poxf008x8kov4ncbjty9",
      "provider": "wordpress",
      "name": "Company blog"
    }
  ],
  "cms": {
    "webflow": {
      "status": "draft"
    },
    "framer": {
      "status": "draft"
    },
    "wix": {
      "status": "draft"
    }
  },
  "body": "<string>",
  "publishResults": [
    {
      "channelId": "<string>",
      "publishedAt": "<string>",
      "error": "<string>",
      "responseIds": [
        "<string>"
      ],
      "url": "<string>"
    }
  ],
  "seoScore": {
    "score": 74,
    "label": "Strong",
    "focusKeyword": "content calendar",
    "checklist": [
      {
        "id": "seo_keyword_title",
        "label": "<string>",
        "category": "<string>",
        "score": 123,
        "maxScore": 123,
        "passed": true,
        "suggestion": "<string>"
      }
    ]
  }
}

Authorizations

X-API-Keystringheaderrequired

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

Path Parameters

postIdstringrequired

Ocoya post ID.

Example:"cmajvvb9q0003ja5vh0538j6r"

Response

application/json

Success

idstring

Post ID. The /post routes accept it too.

Example:"cmajvvb9q0003ja5vh0538j6r"
brandIdstring
Example:"cmayvq3hk00017apshay5qezu"
typestring
statusstring

GENERATING while AI writes it, then DRAFT, SCHEDULED, POSTED once published, or ERROR.

Example:"DRAFT"
scheduledAtstring | null
Example:"2024-01-01T00:00:00Z"
createdAtstring
Example:"2024-01-01T00:00:00Z"
updatedAtstring
Example:"2024-01-01T00:00:00Z"
campaignIdstring | null

The SEO campaign that wrote it, if one did.

titlestring
Example:"How to plan a content calendar in one afternoon"
slugstring
Example:"how-to-plan-a-content-calendar-in-one-afternoon"
excerptstring
seoTitlestring
metaDescriptionstring
keywordstring
tagsstring[]
readingMinutesinteger
Example:6
thumbnailobject | null
Show child attributesHide child attributes
thumbnail.urlstring
thumbnail.widthnumber | null
thumbnail.heightnumber | null
channelsobject[]
Show child attributesHide child attributes
channels.idstring
Example:"clh49poxf008x8kov4ncbjty9"
channels.providerstring

wordpress, devto, notion, webflow, framer, wix or webhook.

Example:"wordpress"
channels.namestring | null
Example:"Company blog"
cmsobject
Show child attributesHide child attributes
cms.webflowobject
Show child attributesHide child attributes
cms.webflow.statusenum<string>

live publishes the item at once, draft keeps it a draft on the site.

Available options: live, draft
Example:"draft"
cms.framerobject
Show child attributesHide child attributes
cms.framer.statusenum<string>

live publishes the item at once, draft keeps it a draft on the site.

Available options: live, draft
Example:"draft"
cms.wixobject
Show child attributesHide child attributes
cms.wix.statusenum<string>

live publishes the item at once, draft keeps it a draft on the site.

Available options: live, draft
Example:"draft"
bodystring

The post in Markdown.

publishResultsobject[]

One entry per publish attempt, per channel.

Show child attributesHide child attributes
publishResults.channelIdstring | null
publishResults.publishedAtstring | null
publishResults.errorstring | null

Why publishing to this channel failed, when it did.

publishResults.responseIdsstring[]

IDs the site gave the published post.

publishResults.urlstring | null
seoScoreobject

The SEO score, as the editor's score panel shows it.

Show child attributesHide child attributes
seoScore.scoreinteger

0-100, as the editor's SEO score shows it.

Example:74
seoScore.labelenum<string>
Available options: Low, Fair, Strong, High
Example:"Strong"
seoScore.focusKeywordstring | null

The keyword it was checked against: the post's own, else the brand keyword it uses most.

Example:"content calendar"
seoScore.checklistobject[]
Show child attributesHide child attributes
seoScore.checklist.idstring
Example:"seo_keyword_title"
seoScore.checklist.labelstring
seoScore.checklist.categorystring
seoScore.checklist.scorenumber
seoScore.checklist.maxScorenumber
seoScore.checklist.passedboolean
seoScore.checklist.suggestionstring

What to change to pass.