Requisitos para integrar
Con la API Cobros de SiPago generás links de pago (Checkout) desde tu sistema. Tu cliente paga en el formulario de SiPago y vos te enterás del resultado.
Cómo funciona

| Paso | Qué hacés | Dónde está explicado |
|---|---|---|
| 1 | Obtener el token de acceso | En esta página, más abajo |
| 2 | Crear la orden de pago | Integración Checkout |
| 3 | Mostrar el link al comprador | Integración Checkout |
| 4 y 5 | Recibir el resultado (webhook y redirección) | Integración avanzada |
| 6 | Consultar el estado de la orden | Estado de la orden |
Las credenciales de desarrollo son públicas y funcionan en el ambiente de desarrollo. Podés seguir toda esta guía sin dar de alta nada.
Credenciales
Necesitás dos datos, que te entrega SiPago:
| Dato | Para qué sirve |
|---|---|
client_id | Identifica tu aplicación. |
client_secret | Clave privada con la que obtenés el token. |
El client_secret se usa solo en tu servidor. No lo pongas en el frontend, en una app móvil ni en un repositorio público.
Cada ambiente (desarrollo y producción) tiene sus propias URLs y credenciales. Las encontrás en Ambientes.
Obtener el token (JWT)
Con el client_id y el client_secret le pedís al servidor de autenticación un token. Ese token va en todas las llamadas a la API de Checkout.
POST {auth_url}/oauth/token, donde {auth_url} es la URL del Auth Server del ambiente que uses (Ambientes).
| Campo | Valor |
|---|---|
grant_type | "client_credentials" (siempre este valor) |
client_id | Tu client_id |
client_secret | Tu client_secret |
scope | "*" (siempre este valor) |
- cURL
- Node.js
- PHP
curl --request POST 'https://auth.stg.geopagos.io/oauth/token' \
--header 'Content-Type: application/json' \
--data '{
"grant_type": "client_credentials",
"client_id": "TU_CLIENT_ID",
"client_secret": "TU_CLIENT_SECRET",
"scope": "*"
}'
// Node.js 18 o superior (fetch incluido)
const res = await fetch('https://auth.stg.geopagos.io/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
grant_type: 'client_credentials',
client_id: process.env.SIPAGO_CLIENT_ID,
client_secret: process.env.SIPAGO_CLIENT_SECRET,
scope: '*',
}),
});
const { access_token } = await res.json();
<?php
$curl = curl_init('https://auth.stg.geopagos.io/oauth/token');
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'grant_type' => 'client_credentials',
'client_id' => getenv('SIPAGO_CLIENT_ID'),
'client_secret' => getenv('SIPAGO_CLIENT_SECRET'),
'scope' => '*',
]),
]);
$response = json_decode(curl_exec($curl), true);
curl_close($curl);
$accessToken = $response['access_token'];
Respuesta:
{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Usá el access_token en el header Authorization de las próximas llamadas:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
No pidas un token nuevo para cada orden. Guardalo y reutilizalo hasta poco antes de que venza. El vencimiento exacto está en el campo exp del JWT (fecha Unix, en segundos). Es más confiable que expires_in, cuyo formato puede variar según el ambiente.
Siguiente paso: crear una orden de pago.