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

# Quick Start

> Del registro de la app al primer envío con access token — panel o API.

<Tip>
  Objetivo: **registrar la app → usuario aprueba en el browser → llamar `/v1` con Bearer token**. ¿Prefieres UI? **Developer → OAuth Apps**.
</Tip>

## En pocas palabras

* **Cliente OAuth** = registro de tu app (nombre, redirect, escopos).
* **PKCE** = protección extra en el flujo del browser (obligatorio).
* **Access token** = credencial JWT \~15 min; **refresh token** = renueva sin nuevo login.

Contexto: [Introducción](/es/oauth-api/como-funciona/introducao) · [Escopos](/es/oauth-api/como-funciona/escopos)

## Antes de empezar

* Cuenta Notifique con acceso al workspace
* **Redirect URI** exacta
* Escopo mínimo (ej.: `email:send`)
* Base URL: `https://api.notifique.dev`

***

## 1. Registrar el cliente

#### Panel

1. **Developer → OAuth Apps → Crear app**
2. Nombre, redirect URIs, escopos
3. Copia **Client ID** y **Client Secret** (secret una sola vez)

#### API

```http theme={null}
POST /oauth/register
Content-Type: application/json
```

```json theme={null}
{
  "client_name": "Mi App",
  "redirect_uris": ["https://miapp.com/oauth/callback"],
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"],
  "token_endpoint_auth_method": "client_secret_basic",
  "scope": "email:send"
}
```

Respuesta esperada: **201** con `client_id` y `client_secret` (si es confidencial).

***

## 2. PKCE y autorización en el browser

Genera `code_verifier`, `code_challenge` (S256) y `state`. Abre:

```
https://api.notifique.dev/oauth/authorize
  ?client_id=TU_CLIENT_ID
  &response_type=code
  &redirect_uri=https://miapp.com/oauth/callback
  &scope=email:send
  &state=ALEATORIO
  &code_challenge=CHALLENGE
  &code_challenge_method=S256
```

Intercambia el `code` de inmediato — expira en minutos.

***

## 3. Intercambiar code por tokens

```http theme={null}
POST /oauth/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic BASE64(client_id:client_secret)
```

```
grant_type=authorization_code
&code=CODIGO
&redirect_uri=https://miapp.com/oauth/callback
&code_verifier=VERIFIER
```

Respuesta esperada: **200** con `access_token` y `refresh_token`.

***

## 4. Llamar la API

```http theme={null}
POST /v1/email/messages
Authorization: Bearer eyJ...
Content-Type: application/json
```

```json theme={null}
{
  "from": "Soporte <noreply@tudominio.com>",
  "to": ["cliente@ejemplo.com"],
  "subject": "Hola vía OAuth",
  "text": "Primer envío con OAuth 2.1."
}
```

Respuesta esperada: **200**. El dominio del `from` debe estar verificado.

***

## Después del primer request

* **Renovar:** `grant_type=refresh_token` — guarda siempre el refresh **nuevo**
* **Revocar:** `POST /oauth/revoke` o **Apps conectadas** en el panel
* **Detalle:** [Guía técnica](/es/oauth-api/como-funciona/guia-tecnico-cliente) · OpenAPI en **Más**
