GET
https://www.app.ocoya.com/api/_public/v1/seo
List all SEO posts
curl --request GET \
  --url https://www.app.ocoya.com/api/_public/v1/seo \
  --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"
      }
    },
    "bodyPreview": "<string>"
  }
]

Authorizations

X-API-Keystringheaderrequired

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

Query Parameters

brandIdstringrequired

Ocoya brand ID. Get one from GET /brands.

Example:"cmayvq3hk00017apshay5qezu"
statusesstring[]

Only posts with these statuses, for example DRAFT or SCHEDULED.

querystring

Search query used to filter results by name or matching text.

Example:"Launch"
pageinteger

Zero-based page number for paginated results.

Example:0
perPageinteger

Maximum number of items to return per page.

Example:20

Response

application/json

Success

object[]
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"
bodyPreviewstring

The body cut to 280 characters.