# Salud pública del servicio

GET /v1/health

Estado general del servicio, sin llave y sin gastar cuota. Sale de una medición en segundo plano: si tiene más de 15 s responde `degraded`, aunque dijera `ok`. Con `down` el código es 503.

| Dato | Valor |
|---|---|
| Método y ruta | `GET /v1/health` |
| Servidor | `https://widget.fital.xyz` |
| `operationId` | `getHealth` |
| Acceso | Público, sin llave |
| Firma de petición | No aplica |
| Idempotencia | No aplica |

- Esta operación no usa la forma de [Errores](/docs/errores/): con `down` responde `503` con el mismo cuerpo que un `200`. Decide por `status`.

## Encabezados de la petición

| Encabezado | Obligatorio | Descripción |
|---|---|---|

Sin llave ni otros encabezados obligatorios.

## Respuestas correctas

### 200 Correcto

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `api_version` | texto | Sí | Versión de la API. `v1`: la única publicada. |
| `status` | texto | Sí | Estado general del servicio. `ok`: El servicio funciona. `degraded`: La medición es vieja o hay problemas parciales. Responde `200`. `down`: El servicio no funciona. Responde `503`. |

#### Valores de `api_version`

| Valor | Significado |
|---|---|
| `v1` | Versión de la API. |

#### Valores de `status`

| Valor | Significado |
|---|---|
| `ok` | El servicio funciona. |
| `degraded` | La medición tiene más de 15 segundos, o hay problemas parciales. Responde `200`. |
| `down` | El servicio no funciona. Responde `503`. |

```json
{
  "status": "ok",
  "api_version": "v1"
}
```

Medición vieja o problema parcial: sigue en `200`:

```json
{
  "status": "degraded",
  "api_version": "v1"
}
```

### 503 Servicio no disponible

Misma forma que la respuesta anterior.

```json
{
  "status": "down",
  "api_version": "v1"
}
```

## Encabezados de la respuesta

| Encabezado | Contenido |
|---|---|
| `X-Request-Id` | Identificador de la petición. Cítalo con soporte. |

## Reintentos

Con `503`, repite con espera exponencial.

Ver [Reintentos](/docs/recetas/reintentos/) y [Límites](/docs/limites/).

## Muestras

**Variables de estas muestras: simulador público, sin cuenta**

Define esto en tu terminal. Con estos valores las muestras corren tal cual contra el simulador público:

```bash
export FITAL_API="https://widget.fital.xyz/explorar/v1"
export FITAL_KEY="sk_test_sandbox_publica"
```

En la cuenta de prueba o en producción cambia la base, la llave y el secreto, y sustituye los `id` de ejemplo por los tuyos. Ver [Ambientes](/docs/ambientes/).

```bash
curl -sS "$FITAL_API/health"
```

```js
const r = await fetch(`${process.env.FITAL_API}/health`);
console.log(r.status, await r.json());
```

```python
import json, os, urllib.error, urllib.request
pet = urllib.request.Request(os.environ["FITAL_API"] + "/health", method="GET",
    headers={})
try:
    with urllib.request.urlopen(pet) as r:
        print(r.status, json.load(r))
except urllib.error.HTTPError as e:
    print(e.code, e.read().decode())
```

```php
<?php
$c = curl_init(getenv('FITAL_API') . '/health');
curl_setopt_array($c, [
  CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($c), "\n";
```

## Guías

- [Salud y estado](/docs/salud-y-estado/)
- [Autenticación](/docs/autenticacion/)
- [Cuenta de prueba](/docs/sandbox/cuenta-de-prueba/)
