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

# Intercambiar un código OAuth

## Intercambiar un código de autorización por un Access Token

Puedes tomar el código recibido como respuesta a una solicitud de permisos y hacer una solicitud para intercambiarlo por un Access Token y un Refresh Token.

Para intercambiar tu `code` de autorización por un access token, realiza una solicitud a `https://uni.staging.fluzapp.com/token/exchange` con los siguientes parámetros de consulta:

| query param   | description                                                                                           |
| ------------- | ----------------------------------------------------------------------------------------------------- |
| code          | El token de autorización anterior                                                                     |
| redirect\_uri | el redirect\_uri que usaste en el paso de autorización anterior. Este URI debe coincidir exactamente. |

Además, configura un encabezado Authorization que sea una cadena codificada en base64 que combine tu client\_id:app\_secret. Este es un encabezado de autenticación Basic, por lo que debe seguir el siguiente formato: `Authorization: Basic <base64 encoded CLIENT_ID:CLIENT_SECRET>`

Por ejemplo, si tu `client_id` es `abc123` y tu `client_secret` de la configuración de OAuth es `def456`, el valor codificado en base64 sería `YWJjMTIzOmRlZjQ1Ng==`.

El `client_id` y el `client_secret` se pueden encontrar en la pestaña `Overview` de [Configurar app de OAuth](/configure-o-auth-app).

Aquí tienes un ejemplo de comando cURL:

```text theme={null}
curl -X GET "https://uni.staging.fluzapp.com/token/exchange?code=<the auth code>&redirect_uri=<the redirect_uri you used in the auth step>" -H "Authorization: Basic YWJjMTIzOmRlZjQ1Ng"
```

La respuesta incluirá:

| query param  | description                                                                          |
| :----------- | :----------------------------------------------------------------------------------- |
| accessToken  | Token de corta duración para solicitudes posteriores a los servicios backend de Fluz |
| refreshToken | refresh token para almacenar y usar cuando el accessToken haya expirado              |
| scopes       | los valores que el usuario permitió a través del flujo anterior                      |

Aquí tienes un ejemplo de una respuesta completa:

```json theme={null}
{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTc1MjA5NDgwNH0.0dKCtVpN0mTHHMuGNNx4VLJisTnovFNPQKhSw6zWosc","authorizationCode":"f082972eb110b80f73b0d0f95d1de9266069a1e4","accessTokenExpiresAt":"2025-07-08T21:05:30.673Z","refreshToken":"8ec16c25951616150b0332a4a6d66547","refreshTokenExpiresAt":"2025-08-08T20:55:30.738Z","scope":\["MAKE\_WIDTHDRAW","MAKE\_DEPOSIT","LIST\_PAYMENT"],"client":\{"id":"dab5c80e-0321-4c3a-988a-ffedfd64d8db","app\_id":"0a92d46e-edf4-422e-8c62-946051e5067b","app\_name":"First OAuth integration","grants":\["authorization\_code","client\_credentials","password","refresh\_token"],"redirectUris":\["http\://localhost:3035/oauth/finalize"],"accessTokenLifetime":600},"user":\{"id":"5070d5a1-d71a-4190-91b0-f116eec51771"}}
```
