---
title: "Token endpoint (authorization_code + PKCE, refresh_token)"
method: POST
path: "/oauth/token"
tags: ["oauth"]
---

# Token endpoint (authorization_code + PKCE, refresh_token)

`POST /oauth/token`

## Request

- Base URL: `https://contadeo.com/api`
- URL: `https://contadeo.com/api/oauth/token`
- Auth: none required

Público. Canjea un authorization code (un solo uso, expira a los 10 min) verificando PKCE S256, o rota tokens con un refresh token OAuth. Acepta `application/x-www-form-urlencoded` (estándar) y JSON. Los access tokens caducan según `expires_in`; el cliente renueva con el refresh_token.

## Response `200`

Tokens emitidos

- object
  - `access_token` string: JWT con los scopes consentidos (roles emisor/contador/lector, nunca owner/admin)
  - `token_type` 'Bearer'
  - `expires_in` integer
  - `refresh_token` string
  - `scope` string

## Other responses

- `400`: Grant inválido (code expirado/canjeado, PKCE fallido...)

---

[API](https://skmtc.dev/contadeo/apis/api-de-contadeo.md) · [All operations](https://skmtc.dev/contadeo/apis/api-de-contadeo/llms.txt) · [OpenAPI document](https://skmtc.dev/contadeo/apis/api-de-contadeo/revisions/461bbb9a74ce?raw)
