Comunicate.top API Checks API

What can be said about an article without calling any model: the SEO analysis and the campaign-type fit. Both are rule-based, so they cost nothing, are not rate-limited, and give the same answer every time. They **report**; they fix nothing. Filling things in stays yours, through a `PATCH`.

Operations 4

DELETE /partner/articles/{articleId} Delete an article #
GET /partner/articles/{articleId}/seo SEO analysis #
GET /partner/articles/{articleId}/potrivire Does it match the campaign type? #
GET /partner/articles/{articleId}/revisions Previous revisions #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/comunicate-top-api-checks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

comunicate-top-api-checks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Comunicate.top Checks API
  version: 1.0.0
  description: 'Publish articles (advertorials, press releases) on 3.800+ websites in Romania, Italy and beyond: catalogue, articles, publications, campaigns, reports.'
  contact:
    url: https://comunicate.top/ro/contact
servers:
- url: https://app.comunicate.top/api/v1
tags:
- name: Checks
  description: 'What can be said about an article without calling any model: the SEO analysis and the campaign-type fit. Both are rule-based, so they cost nothing, are not rate-limited, and give the same answer every time.


    They **report**; they fix nothing. Filling things in stays yours, through a `PATCH`.'
paths:
  /partner/articles/{articleId}:
    delete:
      operationId: delete_articles_articleId
      summary: Delete an article
      description: 'Responds `204` on success. Refused with `409` if the article has publications: a publication''s history must be able to show what was sent, and a published article is removed from the list, not from the database.


        Required scope: `ARTICLES_WRITE`.'
      tags:
      - Checks
      parameters:
      - name: articleId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Invalid input
        '401':
          description: Missing or invalid API key
        '403':
          description: The key lacks the required scope
      security:
      - apiKey: []
      - oauth2:
        - ARTICLES_WRITE
  /partner/articles/{articleId}/seo:
    get:
      operationId: get_articles_articleId_seo
      summary: SEO analysis
      description: 'Score, findings, statistics and the heading outline. The score is the percentage of checks passed, not a ranking promise.


        What matters in the response is `issues`: each has a `code`, a severity and a message saying what is missing. Fixes — an over-long title, a missing description, images without alt text — are written with `PATCH /partner/articles/{id}`.


        Required scope: `ARTICLES_READ`.'
      tags:
      - Checks
      parameters:
      - name: articleId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  score:
                    type: integer
                    description: 0–100, the percentage of checks passed.
                  issues[]:
                    type: string
                    description: '`code`, `severity` and `message`.'
                  stats:
                    type: object
                    additionalProperties: true
                    description: Words, headings, images without alt text, internal and external links, keyword density, and the lengths of title, description and slug.
                  outline:
                    type: string
                    description: The heading outline, with each level.
        '400':
          description: Invalid input
        '401':
          description: Missing or invalid API key
        '403':
          description: The key lacks the required scope
      security:
      - apiKey: []
      - oauth2:
        - ARTICLES_READ
  /partner/articles/{articleId}/potrivire:
    get:
      operationId: get_articles_articleId_potrivire
      summary: Does it match the campaign type?
      description: 'A different question from the SEO analysis: that one says how well the text is written, this one says whether it is the article that was **ordered**. A flawless SEO text is a certain rejection in a brand-mention campaign, because it carries links.


        The check stops the order at submission anyway. Without this route, the only way to find out was to try — article by article, from errors. The response also includes `cerinte`, so the message to the client is not merely "does not match".


        When the article sits in a campaign bound to a type, the verdict arrives on the article anyway, in `potrivireCampanie`; this is for a type you have not chosen yet.


        Required scope: `ARTICLES_READ`.'
      tags:
      - Checks
      parameters:
      - name: articleId
        in: path
        required: true
        schema:
          type: string
      - name: campaignType
        in: query
        required: false
        description: The type checked. Defaults to `SEO`.
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '400':
          description: Invalid input
        '401':
          description: Missing or invalid API key
        '403':
          description: The key lacks the required scope
      security:
      - apiKey: []
      - oauth2:
        - ARTICLES_READ
  /partner/articles/{articleId}/revisions:
    get:
      operationId: get_articles_articleId_revisions
      summary: Previous revisions
      description: 'The full text of every replaced version. A revision is written on each title or content change — exactly when `version` increases.


        It exists for the moment a publisher says the article on the site no longer resembles what they accepted: answering that requires the whole text, not a sample from a log.


        Required scope: `ARTICLES_READ`.'
      tags:
      - Checks
      parameters:
      - name: articleId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  curenta:
                    type: object
                    additionalProperties: true
                    description: The current version, so the first revision has something to compare against.
                  revizii[]:
                    type: string
                    description: At most fifty, most recent first. `changedBy` is empty when the change came through an API key.
        '400':
          description: Invalid input
        '401':
          description: Missing or invalid API key
        '403':
          description: The key lacks the required scope
      security:
      - apiKey: []
      - oauth2:
        - ARTICLES_READ
components:
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: API key from Integrations (bk_live_…)
    oauth2:
      type: oauth2
      description: OAuth 2.1 with PKCE (S256). Dynamic client registration at https://app.comunicate.top/api/v1/oauth/register. The access token is an API key and is accepted everywhere an API key is.
      flows:
        authorizationCode:
          authorizationUrl: https://app.comunicate.top/api/v1/oauth/authorize
          tokenUrl: https://app.comunicate.top/api/v1/oauth/token
          refreshUrl: https://app.comunicate.top/api/v1/oauth/token
          scopes:
            CATALOG_READ: catalog read
            ARTICLES_READ: articles read
            ARTICLES_WRITE: articles write
            MEDIA_WRITE: media write
            PUBLICATIONS_READ: publications read
            PUBLICATIONS_WRITE: publications write
            CAMPAIGNS_READ: campaigns read
            CAMPAIGNS_WRITE: campaigns write
            BALANCE_READ: balance read
            REPORTS_READ: reports read