{"id":"b435a740-415e-4805-8689-0986ee7a134d","owner_id":"a634b01a-53ec-4b3d-9c7c-da7e84b36e79","parent_id":null,"slug":"documentacao-da-api-do-tabnews","title":"Documentação da API do TabNews","body":"## Visão Geral:\n```diff \n- ATENÇÃO: a API passou por mudanças e, portanto, esta documentação não está completa e pode apresentar erros.\n```\n- [Change log](#gabrielsozinho-content-changelog)\n- [Introdução](#gabrielsozinho-content-introducao)\n- [Base URL](#gabrielsozinho-content-baseurl)\n- [Obter conteúdos](#gabrielsozinho-content-a)\n    - [Lista de conteúdos da página inicial](#gabrielsozinho-content-b)\n    - [Lista de conteúdos de um determinado usuário](#gabrielsozinho-content-c)\n    - [Obter conteúdo e dados de uma publicação](#gabrielsozinho-content-d)\n    - [Obter dados de uma publicação](#gabrielsozinho-content-e)\n    - [Obter thumbnail de uma publicação](#gabrielsozinho-content-f)\n- [Status](#gabrielsozinho-content-g)\n- [Autenticação](#gabrielsozinho-content-h)\n    - [Criar usuário](#gabrielsozinho-content-i)\n    - [Logar usuário](#gabrielsozinho-content-j)\n    - [Recuperar senha](#gabrielsozinho-content-k)\n- [Editar perfil](#gabrielsozinho-content-l)\n- [Publicar conteúdos](#gabrielsozinho-content-m)\n\n<br id=\"changelog\">\n\n### Change log\n- (10/09/2022) - Formatação alterada e atualizadas as funções da API.\n<br>\n<br id=\"introducao\">\n\n### Introdução\nTodo TabNews foi construído através de **APIs públicas** e você pode consumir elas da forma que desejar (respeitando as políticas de uso).\n\nA comunicação é feita através de HTTPS usando GET ou POST. Tanto a solicitação quanto a resposta são formatadas como JSON e o tipo de conteúdo de ambas é application/json.\n\n⚠ Para requisições do tipo POST, parâmetros não inclusos na **URL devem ser inseridos como um Content-Type de `application/json`.**\n<br id=\"baseurl\">\n\n### Base URL\nTodas as URLs incluídas nessa documentação exigem a `baseUrl`:\n\n```\nhttps://www.tabnews.com.br/api/v1\n```\n<br>\n<br id=\"a\">\n\n### Obter conteúdos\n#### Lista de conteúdos da página inicial\n<div id=\"b\"></div>\n\n```\nGET {{BaseUrl}}/contents?page={pagina}&per_page={porPagina}&strategy={estrategia}\n```\n\n| Parâmetro | Descrição |\n| --- | --- |\n| {pagina} | O número da página que você deseja acessar. |\n| {porPagina} | O número de conteúdos que devem ser retornados por página. |\n| {estrategia} | Ordem de classificação dos conteúdos, pode ser definida em **new**, **old** e **relevant**. |\n<br>\n\n#### Lista de conteúdos de um determinado usuário\n<div id=\"c\"></div>\n\n```\nGET {{BaseUrl}}/{user}?page={pagina}&per_page={porPagina}&strategy={estrategia}\n```\n\n| Parâmetro | Descrição |\n| --- | --- |\n| {username} | O username do usuário que você quer acessar os conteúdos. |\n| {pagina} | O número da página que você deseja acessar. |\n| {porPagina} | O número de conteúdos que devem ser retornados por página. |\n| {estrategia} | Ordem de classificação dos conteúdos, pode ser definida em **new**, **old** e **relevant**. |\n<br>\n\n#### Obter conteúdo e dados de uma publicação\n<div id=\"d\"></div>\n\n```\nGET {{BaseUrl}}/contents/{user}/{slug}\n```\n\n| Parâmetro | Descrição |\n| --- | --- |\n| {user} | Usuário que você deseja obter o post. |\n| {slug} | Slug do post que você deseja obter. |\n<br>\n\n#### Obter comentários de uma publicação\n<div id=\"e\"></div>\n\n```\nGET {{BaseUrl}}/contents/{user}/{slug}/children\n```\n\n| Parâmetros |     |\n| --- | --- |\n| {user} | Usuário dono do postque você deseja obter os comentários. |\n| {slug} | Slug do post que você deseja obter os comentários. |\n<br>\n\n#### Obter thumbnail de uma publicação\n<div id=\"f\"></div>\n\n```\nGET {{BaseUrl}}/contents/{user}/{slug}/thumbnail\n```\n\n| Parâmetros |     |\n| --- | --- |\n| {user} | Usuário dono do post que você deseja obter a thumbnail. |\n| {slug} | Slug do post que você deseja obter a thumbnail. |\n<br>\n<br id=\"g\">\n\n### Status\nPara obter quantos usuários foram criados (por dia):\n\n```\nGET {{BaseUrl}}/analytics/users-created\n```\n\nPara obter quantas publicações foram feitas (por dia):\n\n```\nGET {{BaseUrl}}/analytics/root-content-published\n```\n\nPara obter quantos usuários foram criados (por dia):\n\n```\nGET {{BaseUrl}}/analytics/child-content-published\n```\n<br>\n<br id=\"h\">\n\n### Autenticação\n<div id=\"i\"></div>\n\n#### Criar usuário\n\n```\nPOST {{BaseUrl}}/users\n```\n\n**Corpo da requisição:**\n\n| Parâmetro | Tipo | Descrição |\n| --- | --- | --- |\n| username | string | O username do usuário que você quer criar. |\n| email | string | Um email válido que será usado para o login e outras opções. |\n| password | string | A senha do usuário que você quer criar. |\n\n⚠ Para confirmar a conta, o usuário deve acessar o link de verificação que foi enviado para o email. ⚠\n<br id=\"j\">\n\n#### Logar usuário\nDepois que o email for verificado, a requisição deve ser feita para este endpoint:\n\n```\nPOST {{BaseUrl}}/sessions\n```\n\n**Corpo da requisição:**\n\n| Parâmetro | Tipo | Descrição |\n| --- | --- | --- |\n| email | string | O email no qual o usuário foi criado. |\n| password | string | A senha que foi definida na criação do usuário. |\n\n<details><summary>Exemplo de resposta</summary>\n    \n```json\n{\n  \"id\": \"6fbeca8f-13f1-43e3-b3**-************\",\n  \"token\": \"e5fba39f8c4ec21cfd50d94ec8f659ed3258e301afe51240786d9ecddc8d35aeecae391ffe73e38d8c**************\",\n  \"expires_at\": \"yyyy-mm-ddT14:34:08.664Z\",\n  \"created_at\": \"yyyy-mm-ddT14:34:08.664Z\",\n  \"updated_at\": \"yyyy-mm-ddT14:34:08.664Z\"\n}\n```\n</details>\n\n<details><summary>Exemplo de resposta com erro</summary>\n    \n```json\n{\n  \"name\": \"UnauthorizedError\",\n  \"message\": \"Dados não conferem.\",\n  \"action\": \"Verifique se os dados enviados estão corretos.\",\n  \"status_code\": 401,\n  \"error_id\": \"4a61276a-8dfc-41cc-a563-7fa4975*****\",\n  \"request_id\": \"fe12a267-aa3c-4fad-8375-2fe92d6*****\",\n  \"error_location_code\": \"CONTROLLER:SESSIONS:POST_HANDLER:DATA_MISMATCH\"\n}\n```\n</details>\n<br id=\"k\">\n\n#### Recuperar senha\n\n```\nPOST {{BaseUrl}}/recovery\n```\n\n**Corpo da requisição:**\n\n| Parâmetro | Tipo | Descrição |\n| --- | --- | --- |\n| username | string | O username do usuário que você deseja recuperar a senha. |\n| email | string | O email do usuário que você deseja recuperar a senha. |\n\n⚠ Apenas 1 dos valores devem ser passados na requisição. O usuário receberá uma link no email para a recuperação da senha.\n<br>\n<br id=\"l\">\n\n### Editar perfil\n\nPara alteração de qualquer informação, a requisição deve ser feita para o seguinte endpoint, onde `{username}` é o username atual do usuário que você deseja alterar as informações:\n\n```\nPOST {{BaseUrl}}/users/{username}\n```\n\n**Corpo da requisição:**\n\nTodos os parâmetros são opcionais, ou seja, você só precisa enviar o parâmetro da informação que você deseja mudar.\n\n| Parâmetros | Tipo | Descrição |\n| --- | --- | --- |\n| username | string | Para alterar o nome de usuário. |\n| email | string | Para alterar o email do usuário (ele precisará ser verifificar da mesma forma que foi verificado na criação do usuário). |\n| password | string | Para alterar a senha do usuário. |\n| notifications | boolean | Para alterar se o usuário deseja receber notificações via email, ou não. |\n<br>\n<br id=\"m\">\n\n### Publicar conteúdos\n\n```\n{{BaseUrl}}/contents\n```\n\n**Cabeçalho da requisição:**\n\n| Parâmetro | Valor | Descrição |\n| --- | --- | --- |\n| Set-Cookie | session_id={seuSessionID} | {seuSessionID} é o session_id que foi obtido na resposta ao fazer login. |\n\n**Corpo da requisição:**\n\n| Parâmetro | Tipo | Descrição |\n| --- | --- | --- |\n| title | string | O título da publicação. *Obrigatório |\n| body | string | O corpo da sua publicação, com formatação em Markdown ou HTML. *Obrigatório |\n| status | string | Para o conteúdo realmente ser publicado, o valor deve ser `published`. *Obrigatório |\n| source_url | string | O link que vai ficar como fonte de seu post, no formato `https://example.com`. Caso não seja definido, a fonte ficará em branco. |\n| slug | string | O slug do seu post. Caso não seja definido, o slug será gerado automaticamente com base no título da publicação. |\n \n \n \nBom, em breve devem ser adicionadas aqui as funções de alterar senha, alterar username, fazer comentários, editar posts, além da função de publicar conteúdos (que eu testei de várias formas e deu diversos erros, de permissão, de PATCH ou de sintaxe mesmo).\n\nedit: Todas essas funções já foram adicionadas aqui. \n\nUma pergunta ao @filipedeschamps, onde essa documentação deve ser adicionada? No GitHub? \n\nQuaisquer sugestões ou alterações vocês podem comentar e serão muito bem vindas.","status":"published","type":"content","source_url":null,"created_at":"2022-07-23T16:12:27.009Z","updated_at":"2024-03-16T01:21:26.879Z","published_at":"2022-07-23T16:12:27.057Z","deleted_at":null,"owner_username":"GabrielSozinho","tabcoins":73,"tabcoins_credit":75,"tabcoins_debit":-3,"children_deep_count":43}