> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ghosting.fun/llms.txt
> Use this file to discover all available pages before exploring further.

# Headers HTTP e suporte a CORS na API Ghosting

> Consuma a API Ghosting direto do navegador. Referência dos headers padrão de CORS, Content-Type e Cache-Control retornados em todas as respostas.

A API pública do Ghosting envia cabeçalhos pré-configurados para consumo universal em navegadores, servidores e clientes móveis. Essa configuração permite que qualquer front-end faça requisições sem proxy intermediário, e que a resposta seja armazenada em cache no edge da CDN.

## Headers padrão

| Header                         | Valor padrão                                     | Descrição                                                                            |
| :----------------------------- | :----------------------------------------------- | :----------------------------------------------------------------------------------- |
| `Access-Control-Allow-Origin`  | `*`                                              | Aceita requisições vindas de qualquer domínio ou front-end (CORS totalmente aberto). |
| `Access-Control-Allow-Methods` | `GET, OPTIONS`                                   | Métodos HTTP permitidos para a API pública.                                          |
| `Content-Type`                 | `application/json; charset=utf-8`                | Todas as respostas são retornadas em formato JSON UTF-8.                             |
| `Cache-Control`                | `public, s-maxage=30, stale-while-revalidate=60` | Cache de borda de 30 segundos, com 60 segundos de tolerância para revalidação.       |

## CORS aberto

Como o `Access-Control-Allow-Origin` é `*`, você pode chamar a API diretamente de um `fetch` no navegador sem configurar proxy CORS:

```javascript theme={null}
// Funciona em qualquer origem, inclusive localhost
const res = await fetch("https://ghosting.fun/api/v1/users/ghosting");
const { data } = await res.json();
```

<Info>
  Como a API não exige credenciais, o header `Access-Control-Allow-Credentials` não é enviado. Não use `credentials: "include"` nas requisições fetch.
</Info>

## Estratégia de cache

O header `Cache-Control: public, s-maxage=30, stale-while-revalidate=60` significa:

* **`s-maxage=30`**: proxies e CDNs podem servir a resposta em cache por até 30 segundos.
* **`stale-while-revalidate=60`**: por até 60 segundos após a expiração, a CDN pode servir a versão em cache enquanto revalida em segundo plano.

Na prática, requisições repetidas ao mesmo perfil retornam quase instantaneamente. Perfis com mudanças raras (badges, decoração de avatar) permanecem consistentes por até 90 segundos.

<Tip>
  Se sua aplicação precisa de dados sempre atualizados (por exemplo, contagem de views em tempo real), considere um cache local adicional com TTL curto para reduzir latência sem exceder a frequência natural de atualização.
</Tip>

## Métodos suportados

Apenas `GET` e `OPTIONS` são aceitos. Chamadas `POST`, `PUT`, `PATCH` ou `DELETE` retornam erro, já que a API pública é somente-leitura.

## Próximos passos

<CardGroup cols={2}>
  <Card title="Autenticação" icon="lock-open" href="/conceitos/autenticacao">
    Entenda por que não é necessária API key.
  </Card>

  <Card title="Consultar perfil" icon="user" href="/api-reference/get-user">
    Faça sua primeira requisição.
  </Card>
</CardGroup>
