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

# Quickstart

> Autenticá tu primera llamada al API en 5 minutos.

Este quickstart te guía desde tener una cuenta hasta hacer la primera llamada autenticada al API. Para emitir una factura de prueba end-to-end mirá el [tutorial de emisión de factura](/tutoriales/emitir-factura).

## 1. Pre-requisitos

Antes de empezar necesitás:

* **Cuenta** en el panel de e-Miti ([emiti.fravelabs.com](https://emiti.fravelabs.com)).
* **Certificado digital** vigente del emisor cargado en la plataforma (obligatorio por SIFEN).
* **Punto de expedición** dado de alta, configurado en ambiente Homologación para las primeras pruebas.

## 2. Generar una API key

1. Iniciá sesión en el panel.
2. Andá a **Configuración → API Keys**.
3. Hacé clic en **Crear API Key**, ponele un nombre descriptivo (`erp-staging`, `pos-tienda-1`, etc.).
4. **Copiá la clave que aparece en el modal**. Empieza con el prefijo `emiti_k_`.

<Warning>
  La clave se muestra **una sola vez**. Si la perdés tenés que generar otra — la BD solo guarda el hash, no el valor original.
</Warning>

## 3. Autenticación

Todas las llamadas al API requieren el header `Authorization` con scheme `ApiKey`:

```bash theme={null}
curl https://api.emiti.fravelabs.com/health \
  -H "Authorization: ApiKey emiti_k_xxxxxxxxxxxxxxxxxxxxxxxx"
```

## 4. Verificar que la clave funciona

Llamá a `GET /health`. Es público (no requiere auth), pero te sirve para confirmar que tu cliente HTTP llega al API correctamente.

```bash theme={null}
curl https://api.emiti.fravelabs.com/health
```

Response esperada:

```json theme={null}
{
  "status": "ok",
  "db": "connected"
}
```

Para confirmar que tu clave es válida, llamá a cualquier endpoint autenticado — por ejemplo, listar los departamentos del catálogo:

```bash theme={null}
curl https://api.emiti.fravelabs.com/v1/catalogos/departamentos \
  -H "Authorization: ApiKey emiti_k_xxxxxxxxxxxxxxxxxxxxxxxx"
```

Si la clave es válida, recibís 200 con el listado de departamentos. Si es inválida o falta, recibís el [error estándar](#shape-de-error) con código `AUTH_APIKEY_INVALIDA` y status 401.

Los códigos de establecimiento y punto de expedición se configuran en el panel (**Configuración → Sucursales**). Necesitarás esos códigos al emitir documentos — los valores son de 3 dígitos, por ejemplo `"001"`.

## 5. Shape de error

Todas las respuestas de error siguen el mismo formato:

```json theme={null}
{
  "error": {
    "codigo": "AUTH_APIKEY_INVALIDA",
    "mensaje": "API key inválida o expirada.",
    "request_id": "01HXY4Z..."
  }
}
```

* **`codigo`** — identificador estable, usalo para lógica de cliente. Ver [Códigos de error SIFEN](/errors/sifen-codes) para la lista completa.
* **`mensaje`** — texto en español, pensado para mostrar al usuario final.
* **`request_id`** — incluilo cuando reportes un problema; nos permite encontrar el trace en logs.

Algunos errores incluyen un campo `extra` con contexto adicional (ej. `codigo_sifen`, `cdc`, `errores[]` para validaciones).

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Conceptos básicos" icon="book" href="/concepts/de">
    DE, CDC, ambientes y flujo asíncrono — la base antes de emitir.
  </Card>

  <Card title="Tutorial: emitir factura" icon="play" href="/tutoriales/emitir-factura">
    Emitir una factura completa desde cURL, con variantes (CF, contribuyente, crédito, USD).
  </Card>
</CardGroup>
