⚡ Inicio Rápido de 5 Minutos

Realiza tu primera llamada a la API en minutos

Inicio Rápido de 5 Minutos

Qué Construirás

Crea una orden PAYIN simple para aceptar un pago de un cliente. Este inicio rápido te pone en marcha sin profundizar en conceptos complejos.

Al final de esta guía, podrás:

  • Autenticarte con la API de Koywe
  • Crear una orden de pago
  • Rastrear el estado del pago

Requisitos Previos

Antes de comenzar, asegúrate de tener:

  • API Key y Secret (contacta a soporte@koywe.com si no los tienes)
  • ID de Organización
  • ID de Comercio
  • Una herramienta para hacer solicitudes HTTP (cURL, Postman o tu lenguaje de programación preferido)

Este inicio rápido usa el entorno sandbox. Todos los pagos son simulados y no se involucra dinero real.


Paso 1: Autenticación

Primero, obtén un token de acceso usando tus credenciales API:

$curl -X POST 'https://api-sandbox.koywe.com/api/v1/auth/sign-in' \
> -H 'Content-Type: application/json' \
> -d '{
> "apiKey": "your_api_key",
> "secret": "your_secret"
> }'

Respuesta:

1{
2 "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
3}

Almacena este token de forma segura. Necesitarás incluirlo en todas las solicitudes posteriores como:
Authorization: Bearer TU_TOKEN

El token expira después de 1 hora. En producción, implementa lógica de actualización de token.


Paso 2: Crear un Contacto (Opcional)

Aunque es opcional, crear un contacto te ayuda a rastrear qué cliente realizó el pago:

1async function createContact(token, orgId, merchantId) {
2 const response = await axios.post(
3 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/contacts`,
4 {
5 email: 'cliente@ejemplo.com',
6 phone: '+573001234567',
7 fullName: 'Juan Pérez',
8 countrySymbol: 'CO',
9 documentType: 'CC',
10 documentNumber: '1234567890',
11 businessType: 'PERSON'
12 },
13 {
14 headers: {
15 'Authorization': `Bearer ${token}`,
16 'Content-Type': 'application/json'
17 }
18 }
19 );
20
21 return response.data;
22}
23
24// Uso
25const contact = await createContact(token, 'tu_org_id', 'tu_merchant_id');
26console.log('ID de Contacto:', contact.id);

Paso 3: Obtener una Cotización

Obtén una cotización de tasa de cambio para el pago (opcional pero recomendado para transparencia):

1async function getQuote(token, orgId, merchantId) {
2 const response = await axios.post(
3 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/quotes`,
4 {
5 originCurrencySymbol: 'COP',
6 destinationCurrencySymbol: 'COP',
7 amountIn: 50000, // 50,000 COP
8 type: 'PAYIN'
9 },
10 {
11 headers: {
12 'Authorization': `Bearer ${token}`,
13 'Content-Type': 'application/json'
14 }
15 }
16 );
17
18 return response.data;
19}
20
21// Uso
22const quote = await getQuote(token, 'tu_org_id', 'tu_merchant_id');
23console.log('Cotización:', quote);

Paso 4: Crear Tu Primera Orden PAYIN

Ahora crea la orden de pago. Esto genera una URL de pago donde tu cliente puede completar el pago:

1async function createPayinOrder(token, orgId, merchantId, contactId) {
2 const response = await axios.post(
3 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/orders`,
4 {
5 type: 'PAYIN', // Tipo de orden: recibir pago
6 originCurrencySymbol: 'COP', // Moneda: Pesos Colombianos
7 destinationCurrencySymbol: 'COP', // Misma moneda (sin conversión)
8 amountIn: 50000, // Monto: 50,000 COP
9 description: 'Pago por Orden #12345', // Descripción para el cliente
10 externalId: `order-${Date.now()}`, // Tu referencia interna
11 contactId: contactId, // Cliente que está pagando
12 paymentMethods: [
13 {
14 method: 'PSE', // Método de pago: PSE (transferencia bancaria colombiana)
15 extra: 'BANCOLOMBIA' // Banco específico
16 }
17 ],
18 successUrl: 'https://tusitio.com/pago/exitoso', // Redirección después de éxito
19 failedUrl: 'https://tusitio.com/pago/fallido' // Redirección después de fallo
20 },
21 {
22 headers: {
23 'Authorization': `Bearer ${token}`,
24 'Content-Type': 'application/json'
25 }
26 }
27 );
28
29 return response.data;
30}
31
32// Uso
33const order = await createPayinOrder(token, 'tu_org_id', 'tu_merchant_id', contact.id);
34console.log('Orden creada:', order.id);
35console.log('URL de pago:', order.paymentUrl);

Respuesta:

1{
2 "id": "ord_abc123xyz",
3 "type": "PAYIN",
4 "status": "PENDING",
5 "amountIn": 50000,
6 "originCurrencySymbol": "COP",
7 "destinationCurrencySymbol": "COP",
8 "paymentUrl": "https://checkout.koywe.com/pay/ord_abc123xyz",
9 "externalId": "order-1699999999",
10 "description": "Pago por Orden #12345",
11 "createdAt": "2025-11-13T10:00:00Z"
12}

¡Éxito! Has creado tu primera orden de pago. La paymentUrl es donde debes redirigir a tu cliente para completar el pago.


Paso 5: Rastrear el Estado de la Orden

Puedes verificar el estado de la orden en cualquier momento:

1async function getOrderStatus(token, orgId, merchantId, orderId) {
2 const response = await axios.get(
3 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/orders/${orderId}`,
4 {
5 headers: {
6 'Authorization': `Bearer ${token}`
7 }
8 }
9 );
10
11 return response.data;
12}
13
14// Uso
15const orderStatus = await getOrderStatus(token, 'tu_org_id', 'tu_merchant_id', order.id);
16console.log('Estado de la orden:', orderStatus.status);
17// Estados posibles: PENDING, PROCESSING, PAID, COMPLETED, FAILED, CANCELLED, EXPIRED

Flujo de Estados de la Orden:

PENDING → PROCESSING → PAID → COMPLETED
  • PENDING: Orden creada, esperando pago del cliente
  • PROCESSING: El pago se está procesando
  • PAID: Pago confirmado
  • COMPLETED: Fondos acreditados a tu saldo virtual

Ejemplo Completo de Extremo a Extremo

Aquí hay un ejemplo de trabajo completo que lo une todo:

1const axios = require('axios');
2
3const BASE_URL = 'https://api-sandbox.koywe.com/api/v1';
4const ORG_ID = process.env.KOYWE_ORG_ID;
5const MERCHANT_ID = process.env.KOYWE_MERCHANT_ID;
6const API_KEY = process.env.KOYWE_API_KEY;
7const SECRET = process.env.KOYWE_SECRET;
8
9async function main() {
10 try {
11 // 1. Autenticar
12 console.log('1. Autenticando...');
13 const authResponse = await axios.post(`${BASE_URL}/auth/sign-in`, {
14 apiKey: API_KEY,
15 secret: SECRET
16 });
17 const token = authResponse.data.token;
18 console.log('✓ Autenticado');
19
20 // 2. Crear contacto
21 console.log('\n2. Creando contacto...');
22 const contactResponse = await axios.post(
23 `${BASE_URL}/organizations/${ORG_ID}/merchants/${MERCHANT_ID}/contacts`,
24 {
25 email: 'cliente@ejemplo.com',
26 phone: '+573001234567',
27 fullName: 'Juan Pérez',
28 countrySymbol: 'CO',
29 documentType: 'CC',
30 documentNumber: '1234567890',
31 businessType: 'PERSON'
32 },
33 { headers: { Authorization: `Bearer ${token}` } }
34 );
35 const contactId = contactResponse.data.id;
36 console.log('✓ Contacto creado:', contactId);
37
38 // 3. Crear orden PAYIN
39 console.log('\n3. Creando orden de pago...');
40 const orderResponse = await axios.post(
41 `${BASE_URL}/organizations/${ORG_ID}/merchants/${MERCHANT_ID}/orders`,
42 {
43 type: 'PAYIN',
44 originCurrencySymbol: 'COP',
45 destinationCurrencySymbol: 'COP',
46 amountIn: 50000,
47 description: 'Pago por Orden #12345',
48 externalId: `order-${Date.now()}`,
49 contactId: contactId,
50 paymentMethods: [{ method: 'PSE', extra: 'BANCOLOMBIA' }],
51 successUrl: 'https://tusitio.com/exitoso',
52 failedUrl: 'https://tusitio.com/fallido'
53 },
54 { headers: { Authorization: `Bearer ${token}` } }
55 );
56 const order = orderResponse.data;
57 console.log('✓ Orden creada:', order.id);
58 console.log('✓ URL de pago:', order.paymentUrl);
59
60 // 4. Verificar estado de la orden
61 console.log('\n4. Verificando estado de la orden...');
62 const statusResponse = await axios.get(
63 `${BASE_URL}/organizations/${ORG_ID}/merchants/${MERCHANT_ID}/orders/${order.id}`,
64 { headers: { Authorization: `Bearer ${token}` } }
65 );
66 console.log('✓ Estado actual:', statusResponse.data.status);
67
68 console.log('\n✅ ¡Éxito! Orden de pago creada.');
69 console.log('👉 Redirige a tu cliente a:', order.paymentUrl);
70
71 } catch (error) {
72 console.error('❌ Error:', error.response?.data || error.message);
73 }
74}
75
76main();

Próximos Pasos

¡Felicitaciones! Has creado exitosamente tu primera orden de pago. Aquí está lo que puedes explorar a continuación:

¿Necesitas Ayuda?