Skip to content

Categorias do Blog

As categorias permitem que você organize as postagens do seu blog de forma lógica e hierárquica. Além de facilitar a navegação para o usuário, uma boa estrutura de categorias é fundamental para o SEO, permitindo que os motores de busca compreendam a semântica do seu conteúdo.

Neste módulo, você encontrará endpoints para gerenciar o ciclo de vida completo das categorias, desde a criação de estruturas em árvore até a recuperação pública de dados para o frontend.

Nota

Todas as requisições para este módulo exigem o cabeçalho X-Blog-Id para identificar o contexto do blog.

Endpoints Públicos

Estes endpoints são otimizados para consumo no frontend do seu blog e não requerem autenticação de usuário administrativo.

Obter Árvore de Categorias

Este endpoint retorna todas as categorias organizadas em uma estrutura de árvore (ninhos de pais e filhos), ideal para construir menus de navegação ou sidebars complexas.

GET /v1/blog/categories/public/tree

ParâmetroTipoObrigatórioDescrição
searchstringNãoFiltra categorias pelo nome.

Exemplo de Requisição

bash
curl -X GET "https://api.us.basis.tavares.in/v1/blog/categories/public/tree" \
     -H "X-Blog-Id: 1" \
     -H "Accept: application/json"

Resposta de Sucesso (200 OK)

json
[
  {
    "id": "1",
    "parentId": null,
    "blogImageId": "5",
    "name": "Tecnologia",
    "slug": "tecnologia",
    "blogImage": {
      "id": "5",
      "uri": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c.jpg",
      "uriThumb": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c_thumb_small.jpg"
    },
    "children": [
      {
        "id": "2",
        "parentId": "1",
        "blogImageId": "5",
        "name": "Desenvolvimento",
        "slug": "desenvolvimento",
        "blogImage": {
          "id": "5",
          "uri": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c.jpg",
          "uriThumb": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c_thumb_small.jpg"
        },
        "children": []
      }
    ]
  }
]

Obter Detalhes por Slug

Recupere informações detalhadas de uma categoria específica utilizando sua URL amigável (slug). Este endpoint é essencial para carregar os metadados (SEO) de uma página de listagem de categoria.

GET /v1/blog/categories/public/slug/:slug

ParâmetroTipoObrigatórioDescrição
slugstringSimO slug único da categoria.

Exemplo de Requisição

bash
curl -X GET "https://api.us.basis.tavares.in/v1/blog/categories/public/slug/category-three" \
     -H "X-Blog-Id: 1"

Resposta de Sucesso (200 OK)

json
{
  "id": "7",
  "parentId": null,
  "blogImageId": "5",
  "name": "Category Three",
  "slug": "category-three",
  "seoTitle": "Título SEO para Category Three",
  "seoDescription": "Descrição detalhada para SEO da Category Three.",
  "createdAt": "2026-03-25T11:11:30.619-03:00",
  "updatedAt": "2026-03-25T15:28:32.412-03:00",
  "parent": null,
  "blogImage": {
    "id": "5",
    "uri": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c.jpg",
    "uriThumb": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c_thumb_small.jpg"
  }
}

Obter Detalhes por ID

Recupere informações completas de uma categoria utilizando seu identificador numérico.

GET /v1/blog/categories/public/:id

ParâmetroTipoObrigatórioDescrição
idnumberSimO ID único da categoria.

Resposta de Sucesso (200 OK)

json
{
  "id": "7",
  "parentId": "5",
  "blogImageId": "5",
  "name": "Category Eight",
  "slug": "category-eight",
  "seoTitle": "Lorem ipsum dolor sit amet",
  "seoDescription": "Lorem ipsum dolor sit amet consectetur adipiscing elit.",
  "createdAt": "2026-03-25T11:11:30.619-03:00",
  "updatedAt": "2026-03-25T11:18:37.479-03:00",
  "parent": {
    "id": "5",
    "name": "Sub category",
    "slug": "sub-category"
  },
  "blogImage": {
    "id": "5",
    "uri": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c.jpg",
    "uriThumb": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c_thumb_small.jpg"
  }
}

Listar para Seleção

Retorna uma lista simplificada de todas as categorias, ideal para preencher componentes de Select ou Autocomplete no frontend.

GET /v1/blog/categories/public/list

ParâmetroTipoObrigatórioDescrição
searchstringNãoFiltra categorias pelo nome.

Resposta de Sucesso (200 OK)

json
[
  {
    "value": "1",
    "label": "Tecnologia"
  },
  {
    "value": "2",
    "label": "Desenvolvimento"
  }
]

Endpoints Administrativos

Atenção

Estes endpoints exigem autenticação via token (Bearer) e permissões de blogUser.

Criar Nova Categoria

Cria uma nova categoria para o blog. O slug será gerado automaticamente a partir do name.

POST /v1/blog/categories

Payload (Body)

AtributoTipoObrigatórioDescrição
namestringSimNome da categoria (máx 150 caracteres).
parentIdnumberNãoID da categoria pai (deve pertencer ao mesmo blog).
blogImageIdnumberNãoID da imagem associada à categoria.
seoTitlestringNãoTítulo personalizado para SEO (máx 200 caracteres).
seoDescriptionstringNãoDescrição para SEO (máx 200 caracteres).

Exemplo de Requisição

bash
curl -X POST "https://api.us.basis.tavares.in/v1/blog/categories" \
     -H "Authorization: Bearer {token}" \
     -H "X-Blog-Id: 1" \
     -H "Content-Type: application/json" \
     -d '{
       "name": "Inovação",
       "parentId": 5,
       "blogImageId": 5,
       "seoTitle": "Inovação e Futuro",
       "seoDescription": "Fique por dentro das novidades do futuro."
     }'

Respostas

  • 201 Created: Categoria criada com sucesso.
    json
    { "id": "9" }
  • 422 Unprocessable Entity: Falha na validação dos dados.
    json
    {
      "errors": [
        { "message": "Nome é obrigatório", "field": "name" }
      ]
    }

Atualizar Categoria

Atualiza os dados de uma categoria existente. Ao alterar o nome, o slug será recalculado.

PUT /v1/blog/categories/:id

ParâmetroTipoObrigatórioDescrição
idnumberSimID da categoria a ser atualizada.

Exemplo de Requisição

bash
curl -X PUT "https://api.us.basis.tavares.in/v1/blog/categories/7" \
     -H "Authorization: Bearer {token}" \
     -H "Content-Type: application/json" \
     -d '{
       "name": "Tecnologia Avançada",
       "seoTitle": "Tecnologia de Ponta"
     }'

Resposta de Sucesso (204 No Content)

A resposta não contém corpo em caso de sucesso.


Remover Categoria

Exclui permanentemente uma categoria do banco de dados.

DELETE /v1/blog/categories/:id

Nota

Ao excluir uma categoria, verifique se existem posts vinculados a ela para evitar inconsistências no frontend.

Exemplo de Requisição

bash
curl -X DELETE "https://api.us.basis.tavares.in/v1/blog/categories/7" \
     -H "Authorization: Bearer {token}"

Resposta de Sucesso (204 No Content)

A categoria foi removida com sucesso.


Listar Categorias (Gerenciamento)

Lista todas as categorias de forma plana, útil para tabelas de gerenciamento no dashboard.

GET /v1/blog/categories

ParâmetroTipoObrigatórioDescrição
pagenumberNãoNúmero da página (padrão: 1).
perPagenumberNãoItens por página (padrão: 20).
searchstringNãoBusca por nome da categoria.

Resposta de Sucesso (200 OK)

json
{
  "meta": {
    "total": 5,
    "perPage": 25,
    "currentPage": 1,
    "lastPage": 1,
    "firstPage": 1
  },
  "data": [
    {
      "id": "7",
      "blogImageId": "5",
      "name": "Category Three",
      "slug": "category-three",
      "parentId": "5",
      "createdAt": "2026-03-25T11:11:30.619-03:00",
      "updatedAt": "2026-03-25T11:18:37.479-03:00",
      "parent": {
        "id": "5",
        "name": "Sub category",
        "slug": "sub-category"
      },
      "blogImage": {
        "id": "5",
        "uri": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c.jpg",
        "uriThumb": "https://tavares-dev.s3.amazonaws.com/images/1635fe4c_thumb_small.jpg"
      }
    }
  ]
}