---
title: "Obtener un token de acceso OAuth2"
description: "Intercambia las credenciales de la API de CloudPrint por un token Bearer OAuth2 de corta duración mediante Client Credentials."
---
<nav class="docs-breadcrumb" aria-label="Breadcrumb"><a href="/es/docs/">Documentación de CloudPrint</a><span aria-hidden="true">/</span><span>Referencia de la API</span></nav>

# Obtener un token de acceso OAuth2

<p class="docs-lead">Intercambia las credenciales de la API de CloudPrint por un token Bearer OAuth2 de corta duración mediante Client Credentials.</p>

<div class="api-endpoint-summary"><span class="api-method api-method-post">POST</span><code>/oauth/token</code><span><strong>Versión de la API:</strong> v1</span><span><strong>operationId:</strong> <code>issueOAuthToken</code></span><a href="/es/docs/api/v1/authentication/token/index.md">Ver como Markdown</a></div>

## Qué hace este método

Intercambia las credenciales de la API de CloudPrint por un token Bearer OAuth2 de corta duración mediante Client Credentials.

## Autenticación

Este método no requiere un token Bearer.

## Solicitud

**URL de producción:** `https://public-api.cloudprint.me/oauth/token`

### Parámetros

| Nombre | Ubicación | Tipo | Obligatorio | Descripción | Restricciones |
| --- | --- | --- | --- | --- | --- |
| `X-Request-Id` | header | `string` | no | Identificador opcional para rastrear la solicitud; CloudPrint devuelve un valor seguro en la cabecera de respuesta. | maxLength: 128; example: `"order-100045-attempt-1"` |

### Cuerpo de la solicitud

**Tipo de contenido:** `application/x-www-form-urlencoded`

| Nombre | Tipo | Obligatorio | Descripción | Restricciones |
| --- | --- | --- | --- | --- |
| `grant_type` | `string` | sí | Tipo de concesión OAuth2 usado para solicitar el token. | enum: `client_credentials`; example: `"client_credentials"` |
| `client_id` | `string` | sí | Identificador público de las credenciales API de la cuenta. | — |
| `client_secret` | `string` | sí | Secreto de las credenciales API; guárdalo únicamente en el almacén de secretos del servidor. | — |
| `scope` | `string` | no | Permisos solicitados para el token de acceso, separados por espacios. | example: `"agents:read printers:read documents:write print_jobs:write print_jobs:read"` |

### Ejemplos de solicitud

#### cURL

```bash
curl -sS https://public-api.cloudprint.me/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'client_id=33333333-3333-4333-8333-333333333333' \
  --data-urlencode 'client_secret=cpsec_...' \
  --data-urlencode 'scope=agents:read printers:read documents:write print_jobs:write print_jobs:read'
```

#### PHP

```php
<?php

$response = file_get_contents('https://public-api.cloudprint.me/oauth/token', false, stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
        'content' => http_build_query([
            'grant_type' => 'client_credentials',
            'client_id' => getenv('CLOUDPRINT_CLIENT_ID'),
            'client_secret' => getenv('CLOUDPRINT_CLIENT_SECRET'),
            'scope' => 'agents:read printers:read documents:write print_jobs:write print_jobs:read',
        ]),
    ],
]));

$token = json_decode((string) $response, true, flags: JSON_THROW_ON_ERROR)['access_token'];
```

## Respuesta

**Estado HTTP:** `200` — Solicitud completada.

### Campos de respuesta

| Nombre | Tipo | Obligatorio | Descripción | Restricciones |
| --- | --- | --- | --- | --- |
| `token_type` | `string` | sí | Tipo de token OAuth2; Public API usa `Bearer`. | example: `"Bearer"` |
| `expires_in` | `integer` | sí | Duración del token de acceso en segundos desde su emisión. | example: `900` |
| `access_token` | `string` | sí | Token Bearer OAuth2 de corta duración para solicitudes a Public API. | example: `"eyJ..."` |
| `scope` | `string` | sí | Permisos solicitados para el token de acceso, separados por espacios. | example: `"printers:read print_jobs:write"` |

### Ejemplo de respuesta

```json
{
  "token_type": "Bearer",
  "expires_in": 900,
  "access_token": "eyJ...",
  "scope": "printers:read print_jobs:write"
}
```

## Errores

| Estado HTTP | Descripción |
| --- | --- |
| `400` | Comprueba el formato y los parámetros. |
| `401` | Falta la autenticación o no es válida. |
| `429` | Se superó el límite de solicitudes; respeta Retry-After. |
| `500` | Error interno de CloudPrint. |

## Recomendaciones de integración

- Guarda `client_secret` únicamente en el almacén de secretos del servidor; nunca lo envíes al navegador ni lo incluyas en una aplicación de escritorio distribuida.
- Conserva el token hasta poco antes de `expires_in`, en lugar de solicitar uno para cada trabajo.
- Solicita únicamente los permisos que necesite la integración.

## Documentación relacionada

<div class="docs-card-grid"><a class="docs-card" href="/es/docs/api/v1/authentication/client-context/"><strong>Obtener el contexto actual del cliente API</strong><span>Confirma qué cuenta, aplicación cliente y permisos representa el token de acceso actual.</span></a>
<a class="docs-card" href="/es/docs/api/authentication/"><strong>Autenticación del servidor</strong><span>Intercambia credenciales de API por un token OAuth2 de corta duración mediante Client Credentials.</span></a>
<a class="docs-card" href="/es/docs/api/v1/errors/"><strong>Errores y reintentos de la API de CloudPrint</strong><span>Gestiona estados HTTP, errores legibles por máquina, límites de solicitudes, trazabilidad y reintentos seguros.</span></a></div>

<nav class="docs-resource-links" aria-label="Siguientes pasos"><a href="https://cloudprint.me/status/">Estado del servicio</a><a href="/es/docs/api/v1/explorer/">OpenAPI</a><a href="https://developer.cloudprint.me">Developer Portal</a><a href="https://my.cloudprint.me">Abrir cuenta</a><a href="/docs/legal/privacy/">Política de privacidad</a><a href="/docs/legal/terms/">Términos de uso</a><a href="/docs/legal/payments-and-refunds/">Pagos y reembolsos</a><a href="/docs/legal/data-processing/">Tratamiento de datos</a><a href="/docs/legal/service-level-agreement/">Service Level Agreement</a></nav>