O que é

Blog é o módulo de conteúdo editorial do site da empresa. Pela API, você cuida dos posts usando a mesma base que o painel do miCore usa por dentro.

Na prática: você cria o rascunho de um post, consulta e edita o que já existe e controla quando ele fica no ar — tudo em nome de um usuário responsável, respeitando as permissões dele.

O que dá para fazer hoje

  • Criar um rascunho de post.
  • Listar e consultar posts existentes.
  • Editar um rascunho.
  • Publicar e despublicar um post.
  • Listar categorias para classificar os posts.
  • Criar, editar e desativar categorias do blog.

Importante

  • Um post nasce sempre como rascunho — nada vai para o site antes de publicar.
  • Publicar e despublicar são ações próprias, separadas de criar e editar.
  • A autoria é sempre do usuário responsável pela credencial.

Disponibilidade na API

Endpoints de Blog

Crie, edite e publique posts e gerencie suas categorias. Os exemplos abaixo são gerados pelo contrato OpenAPI oficial.

GET /api/v1/posts

Lista posts do blog

Exige o escopo `posts:read`.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerystringNão—
category_idqueryintegerNão—
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/posts" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 88,
            "title": "Como escolher sua primeira impressora",
            "slug": "como-escolher-sua-primeira-impressora",
            "status": "draft",
            "content": "<p>Conteúdo do post.</p>",
            "content_blocks": null,
            "meta_title": null,
            "meta_description": null,
            "author": {
                "id": 12,
                "name": "Equipe miCore"
            },
            "category": {
                "id": 3,
                "name": "Guias",
                "slug": "guias"
            },
            "featured_image": null,
            "published_at": null,
            "created_at": "2026-10-17T09:00:00-03:00",
            "updated_at": "2026-10-17T09:00:00-03:00"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de posts401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/posts

Cria um post em rascunho

Exige `posts:write` e a permissão `create` em Posts. O post nasce como rascunho; publicar é uma ação separada.

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
titlestringSimAté 255 caracteres.
author_idintegerSimId de um cliente marcado como autor do blog, como no painel (liste em GET /blog-authors).
slugstring | nullNãoGerado a partir do título quando ausente. Até 255 caracteres.
contentstring | nullNãoHTML pronto. Ignorado quando content_blocks é enviado.
content_blocksarray<object>NãoBlocos do editor; renderizados em HTML no servidor.
meta_titlestring | nullNãoAté 320 caracteres.
meta_descriptionstring | nullNãoAté 320 caracteres.
referencesstring | nullNão—
category_idinteger | nullNão—
product_category_idinteger | nullNão—
featured_image_idinteger | nullNãoId de um item de imagem da biblioteca de mídia.

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/posts" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","author_id":1,"slug":null,"content":null,"content_blocks":[[]],"meta_title":null,"meta_description":null,"references":null,"category_id":1,"product_category_id":1,"featured_image_id":1}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 88,
        "title": "Como escolher sua primeira impressora",
        "slug": "como-escolher-sua-primeira-impressora",
        "status": "draft",
        "content": "<p>Conteúdo do post.</p>",
        "content_blocks": null,
        "meta_title": null,
        "meta_description": null,
        "author": {
            "id": 12,
            "name": "Equipe miCore"
        },
        "category": {
            "id": 3,
            "name": "Guias",
            "slug": "guias"
        },
        "featured_image": null,
        "published_at": null,
        "created_at": "2026-10-17T09:00:00-03:00",
        "updated_at": "2026-10-17T09:00:00-03:00"
    }
}

Respostas possíveis

201 Post criado em rascunho401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/posts/{post}

Exibe um post

Exige o escopo `posts:read`.

Parâmetros

NomeTipoObrigatórioDescrição
postpathintegerSim—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/posts/{post}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 88,
        "title": "Como escolher sua primeira impressora",
        "slug": "como-escolher-sua-primeira-impressora",
        "status": "draft",
        "content": "<p>Conteúdo do post.</p>",
        "content_blocks": null,
        "meta_title": null,
        "meta_description": null,
        "author": {
            "id": 12,
            "name": "Equipe miCore"
        },
        "category": {
            "id": 3,
            "name": "Guias",
            "slug": "guias"
        },
        "featured_image": null,
        "published_at": null,
        "created_at": "2026-10-17T09:00:00-03:00",
        "updated_at": "2026-10-17T09:00:00-03:00"
    }
}

Respostas possíveis

200 Post encontrado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/posts/{post}

Atualiza um post em rascunho

Exige `posts:write` e a permissão `edit` em Posts. Não altera o estado de publicação.

Parâmetros

NomeTipoObrigatórioDescrição
postpathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
titlestringNãoAté 255 caracteres.
author_idintegerNãoId de um cliente marcado como autor do blog.
slugstring | nullNãoAté 255 caracteres.
contentstring | nullNão—
content_blocksarray<object>Não—
meta_titlestring | nullNãoAté 320 caracteres.
meta_descriptionstring | nullNãoAté 320 caracteres.
referencesstring | nullNão—
category_idinteger | nullNão—
product_category_idinteger | nullNão—
featured_image_idinteger | nullNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/posts/{post}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"title":"string","author_id":1,"slug":null,"content":null,"content_blocks":[[]],"meta_title":null,"meta_description":null,"references":null,"category_id":1,"product_category_id":1,"featured_image_id":1}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 88,
        "title": "Como escolher sua primeira impressora",
        "slug": "como-escolher-sua-primeira-impressora",
        "status": "draft",
        "content": "<p>Conteúdo do post.</p>",
        "content_blocks": null,
        "meta_title": null,
        "meta_description": null,
        "author": {
            "id": 12,
            "name": "Equipe miCore"
        },
        "category": {
            "id": 3,
            "name": "Guias",
            "slug": "guias"
        },
        "featured_image": null,
        "published_at": null,
        "created_at": "2026-10-17T09:00:00-03:00",
        "updated_at": "2026-10-17T09:00:00-03:00"
    }
}

Respostas possíveis

200 Post atualizado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/posts/{post}/publish

Publica um post

Exige `posts:publish` e a permissão `edit` em Posts. Deixa o post visível no site.

Parâmetros

NomeTipoObrigatórioDescrição
postpathintegerSim—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/posts/{post}/publish" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 88,
        "title": "Como escolher sua primeira impressora",
        "slug": "como-escolher-sua-primeira-impressora",
        "status": "draft",
        "content": "<p>Conteúdo do post.</p>",
        "content_blocks": null,
        "meta_title": null,
        "meta_description": null,
        "author": {
            "id": 12,
            "name": "Equipe miCore"
        },
        "category": {
            "id": 3,
            "name": "Guias",
            "slug": "guias"
        },
        "featured_image": null,
        "published_at": null,
        "created_at": "2026-10-17T09:00:00-03:00",
        "updated_at": "2026-10-17T09:00:00-03:00"
    }
}

Respostas possíveis

200 Post publicado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/posts/{post}/unpublish

Despublica um post

Exige `posts:publish` e a permissão `edit` em Posts. Tira o post do ar sem apagar.

Parâmetros

NomeTipoObrigatórioDescrição
postpathintegerSim—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/posts/{post}/unpublish" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 88,
        "title": "Como escolher sua primeira impressora",
        "slug": "como-escolher-sua-primeira-impressora",
        "status": "draft",
        "content": "<p>Conteúdo do post.</p>",
        "content_blocks": null,
        "meta_title": null,
        "meta_description": null,
        "author": {
            "id": 12,
            "name": "Equipe miCore"
        },
        "category": {
            "id": 3,
            "name": "Guias",
            "slug": "guias"
        },
        "featured_image": null,
        "published_at": null,
        "created_at": "2026-10-17T09:00:00-03:00",
        "updated_at": "2026-10-17T09:00:00-03:00"
    }
}

Respostas possíveis

200 Post despublicado401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/blog-authors

Lista os autores do blog

Exige o escopo `posts:read`. Autores são os clientes marcados como autor do blog, os mesmos do seletor do painel. Use para descobrir o `author_id` ao criar ou editar um post; a resposta traz só id e nome.

Parâmetros

NomeTipoObrigatórioDescrição
searchquerystringNãoBusca por nome ou e-mail.
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/blog-authors" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 12,
            "name": "Equipe miCore"
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de autores401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
GET /api/v1/blog-categories

Lista categorias do blog

Exige o escopo `blog-categories:read`. Use para descobrir o `category_id` ao criar ou editar um post.

Parâmetros

NomeTipoObrigatórioDescrição
statusquerybooleanNãoAtiva (true) ou inativa (false).
per_pagequeryintegerNão—

Exemplo de requisição

cURL
curl "$MICORE_BASE_URL/blog-categories" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": [
        {
            "id": 3,
            "name": "Guias",
            "slug": "guias",
            "parent_id": null,
            "status": true
        }
    ],
    "links": [],
    "meta": []
}

Respostas possíveis

200 Página de categorias401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
POST /api/v1/blog-categories

Cria uma categoria do blog

Exige `blog-categories:write` e a permissão de criar em Categorias. Criação idempotente (envie um Idempotency-Key).

Parâmetros

NomeTipoObrigatórioDescrição
Idempotency-KeyheaderstringSimIdentificador único da mutação, com 8 a 100 caracteres. O resultado fica reutilizável por 24 horas e a chave não pode ser reutilizada depois de expirar.

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringSimAté 255 caracteres.
statusboolean | nullNão—
parent_idinteger | nullNãoCategoria pai (precisa existir).
urlstring | nullNãoEndereço da categoria. Vazio ou ausente: gerado a partir do nome, com sufixo -2, -3 quando já existir. Até 255 caracteres.
descriptionstring | nullNão—
meta_titlestring | nullNãoAté 255 caracteres.
meta_descriptionstring | nullNão—

Exemplo de requisição

cURL
curl -X POST "$MICORE_BASE_URL/blog-categories" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: board-request-0001" \
  -H "Content-Type: application/json" \
  -d '{"name":"Guias","status":true,"parent_id":null,"url":"guias"}'

Exemplo de resposta JSON

Resposta · 201
{
    "data": {
        "id": 3,
        "name": "Guias",
        "slug": "guias",
        "parent_id": null,
        "status": true
    }
}

Respostas possíveis

201 Categoria criada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente409 Chave em processamento ou reutilizada com outro conteúdo422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
PATCH /api/v1/blog-categories/{blogCategory}

Atualiza uma categoria do blog

Exige `blog-categories:write` e a permissão de editar em Categorias.

Parâmetros

NomeTipoObrigatórioDescrição
blogCategorypathintegerSim—

Corpo da requisição

CampoTipoObrigatórioDescrição
namestringNãoAté 255 caracteres.
statusboolean | nullNão—
parent_idinteger | nullNãoCategoria pai (precisa existir).
urlstring | nullNãoAté 255 caracteres.
descriptionstring | nullNão—
meta_titlestring | nullNãoAté 255 caracteres.
meta_descriptionstring | nullNão—

Exemplo de requisição

cURL
curl -X PATCH "$MICORE_BASE_URL/blog-categories/{blogCategory}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"name":"Guias","status":true,"parent_id":null,"url":"guias"}'

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 3,
        "name": "Guias",
        "slug": "guias",
        "parent_id": null,
        "status": true
    }
}

Respostas possíveis

200 Categoria atualizada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado422 Dados inválidos429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant
DELETE /api/v1/blog-categories/{blogCategory}

Desativa uma categoria do blog

Exige `blog-categories:write` e a permissão de desabilitar em Categorias. Desativa sem apagar; reativar é pelo painel. Idempotente.

Parâmetros

NomeTipoObrigatórioDescrição
blogCategorypathintegerSim—

Exemplo de requisição

cURL
curl -X DELETE "$MICORE_BASE_URL/blog-categories/{blogCategory}" \
  -H "Authorization: Bearer $MICORE_TOKEN" \
  -H "Accept: application/json"

Exemplo de resposta JSON

Resposta · 200
{
    "data": {
        "id": 3,
        "name": "Guias",
        "slug": "guias",
        "parent_id": null,
        "status": true
    }
}

Respostas possíveis

200 Categoria desativada401 Token ausente, inválido, expirado ou revogado403 Escopo, assinatura, módulo ou permissão insuficiente404 Recurso não encontrado429 Cota por minuto da credencial excedida503 O domínio não pôde ser associado com segurança a um tenant