tag.cotizacion.process.next_action./public-api/v1/sales-processX-Api-KeyX-TimestampX-NonceX-SignatureMETHOD
/public-api/v1/ruta/exacta?query=exacta
TIMESTAMP
NONCE
SHA256_HEX_DEL_BODY_CRUDOPOST, PATCH y cualquier request con body, la firma se calcula con el body crudo exacto.INVALID_SIGNATURE.nonce no se puede reutilizar.{
"process": {
"state": "waiting",
"next_action": "wait_identity_validation",
"pause_reason": "identity_validation_pending",
"can_continue": false,
"checkpoints": {
"referencias_validadas": false,
"oferta_seleccionada": false,
"contrato_firmado": false,
"imei_validado": false
}
}
}state: estado general del flujo.next_action: accion siguiente esperada por el integrador.pause_reason: motivo por el que el flujo esta esperando o bloqueado.can_continue: indica si ya existe una accion disponible para continuar.checkpoints: avance por hitos del proceso.statestate | Significado |
|---|---|
waiting | El flujo depende de un proceso externo o de una confirmacion pendiente. |
action_required | La integracion ya puede invocar el siguiente endpoint. |
completed | La venta termino correctamente. |
blocked | La cotizacion ya no permite continuar. |
next_actionnext_action | Significado operativo |
|---|---|
wait_identity_validation | El cliente debe completar verificacion de identidad y/o buro. |
wait_reference_validation | Ya se solicitaron referencias o aun no se cumple el minimo. |
select_offer | Ya se puede previsualizar y seleccionar una oferta. |
wait_contract_signature | La oferta ya fue seleccionada y el contrato debe firmarse. |
wait_imei_validation | El contrato ya fue firmado y falta validar ICCID/IMEI. |
continue | El flujo ya puede pasar al siguiente endpoint operativo. |
completed | La venta fue finalizada. |
rejected | La cotizacion quedo rechazada o bloqueada. |
quote.createdquote.updatedreference.requestedreference.acceptedreference.rejectedoffer.previewedoffer.selectedcontract.signedimei.validated| Paso | Endpoint principal | Resultado esperado |
|---|---|---|
| 1 | POST /cotizaciones | Se crea la cotizacion y se entrega la URL de verificacion de identidad. |
| 2 | POST /cotizaciones/:id/notificaciones/webhooks o GET /cotizaciones/:id | Se define si el seguimiento sera por webhook o polling. |
| 3 | Sin endpoint directo del integrador | El cliente final completa la validacion de identidad. |
| 4 | POST /cotizaciones/:id/referencias | Se solicita una referencia y el flujo espera confirmacion. |
| 5 | GET /catalogs/... y POST /cotizaciones/:id/ofertas/previsualizar | Se obtienen catalogos y se generan ofertas disponibles. |
| 6 | POST /cotizaciones/:id/ofertas/seleccionar | Se elige un plan y el flujo pasa a contrato. |
| 7 | POST /cotizaciones/:id/contrato/render | Se obtiene el PDF o base64 del contrato. |
| 8 | POST /cotizaciones/:id/contrato/firma | Se registra evidencia de firma. |
| 9 | POST /cotizaciones/:id/iccid-imei/validar | Se validan linea y equipo para continuar. |
| 10 | POST /cotizaciones/:id/tag/finalizar | Se completa la venta, dispositivo, financiamiento y recibo. |
{
"terminos_buro": true
}terminos_buro es obligatorio.true.{
"cotizacion": {
"id": "{{COTIZACION_ID}}"
},
"identity_verification": {
"url": "https://verificacion.paydaymx.com/verificacion/{{COTIZACION_ID}}?query={{JWT_DE_SESION}}&isMobile=false&api=true"
}
}cotizacion.id.identity_verification.url.{
"url": "https://tu-sistema.com/webhooks/payday-sales-process",
"events": [
"quote.created",
"quote.updated",
"reference.requested",
"reference.accepted",
"reference.rejected",
"offer.previewed",
"offer.selected",
"contract.signed",
"imei.validated"
],
"active": true
}url es obligatoria.events es opcional; si no se envia, el backend puede registrar *.secret es opcional y puede omitirse o enviarse vacio.{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"process": {
"state": "waiting",
"next_action": "wait_identity_validation",
"pause_reason": "identity_validation_pending",
"can_continue": false,
"checkpoints": {
"referencias_validadas": false,
"oferta_seleccionada": false,
"contrato_firmado": false,
"imei_validado": false
}
}
},
"webhook": {
"id": "{{WEBHOOK_ID}}",
"url": "https://tu-sistema.com/webhooks/payday-sales-process",
"events": [
"quote.created",
"quote.updated",
"reference.requested",
"reference.accepted",
"reference.rejected",
"offer.previewed",
"offer.selected",
"contract.signed",
"imei.validated"
],
"active": true,
"created_at": "2026-05-05T23:29:31.958Z",
"updated_at": "2026-05-05T23:29:31.958Z"
}
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"status": "Iniciando Verificacion",
"rating": null,
"score": 0,
"venta_con_inventario": false,
"referencias": {
"total": 0,
"aceptadas": 0,
"rechazadas": 0,
"pendientes": 0,
"minimo_cumplido": false
},
"producto": null,
"pricing": null,
"plan": null,
"process": {
"state": "waiting",
"next_action": "wait_identity_validation",
"pause_reason": "identity_validation_pending",
"can_continue": false,
"checkpoints": {
"referencias_validadas": false,
"oferta_seleccionada": false,
"contrato_firmado": false,
"imei_validado": false
}
},
"notifications": {
"webhooks_registrados": 1
},
"updated_at": "2026-05-05T23:29:31.959Z"
}
}identity_verification.url y esperar a que el flujo interno de Payday complete la verificacion.next_action = wait_identity_validation.state = waiting, pero next_action cambiara a:{
"process": {
"next_action": "wait_reference_validation"
}
}stage ni step.rating o score manualmente.referencias.409.52.{
"telefono": "5568726342",
"referencia": "Maria Lopez",
"bodyVariables": ["Nombre del cliente"]
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"status": "Analisis crediticio cache completado",
"rating": "A",
"score": 24,
"venta_con_inventario": false,
"referencias": {
"total": 1,
"aceptadas": 0,
"rechazadas": 0,
"pendientes": 1,
"minimo_cumplido": false
},
"producto": null,
"pricing": null,
"plan": null,
"process": {
"state": "waiting",
"next_action": "wait_reference_validation",
"pause_reason": "references_pending",
"can_continue": false,
"checkpoints": {
"referencias_validadas": false,
"oferta_seleccionada": false,
"contrato_firmado": false,
"imei_validado": false
}
},
"notifications": {
"webhooks_registrados": 1
},
"updated_at": "2026-05-05T23:48:21.326Z"
},
"referencia": {
"id": "{{REFERENCIA_ID}}",
"estado": "pendiente",
"telefono": "********6342"
}
}reference.requested.next_action = wait_reference_validation.reference.accepted.marcaId, modeloId y prefijoId.{
"process": {
"state": "action_required",
"next_action": "select_offer",
"pause_reason": null,
"can_continue": true
}
}ofertas.rating, la API responde error de negocio.precio y enganche.{
"marcaId": "{{MARCA_ID}}",
"modeloId": "{{MODELO_ID}}",
"prefijoId": "{{PREFIJO_ID}}",
"precio": 2000,
"enganche": 500
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"rating": "A",
"venta_con_inventario": false,
"process": {
"state": "action_required",
"next_action": "select_offer",
"pause_reason": null,
"can_continue": true,
"checkpoints": {
"referencias_validadas": true,
"oferta_seleccionada": false,
"contrato_firmado": false,
"imei_validado": false
}
}
},
"producto": {
"marca_id": "{{MARCA_ID}}",
"marca": "Samsung",
"modelo_id": "{{MODELO_ID}}",
"modelo": "Galaxy A06",
"prefijo_id": "{{PREFIJO_ID}}",
"prefijo": "SM-A065M",
"producto_id": null,
"precio": 2500,
"color": null,
"capacidad": 0,
"ram": 0,
"imagen": "https://imagenes-payday.s3.us-east-2.amazonaws.com/A06.jpg"
},
"pricing": {
"precio": 2500,
"enganche": 500,
"enganche_minimo": 0,
"enganche_mode": "manual",
"porcentaje_enganche_aplicado": 0.08,
"precio_maximo_por_rating": 7000,
"price_boost": 2000,
"fecha_calculo_precios": "2026-05-05T23:56:26.991Z"
},
"ofertas": [
{
"offer_id": "w13-m3-i1.1-f4200-e500",
"semanas": 13,
"meses": 3,
"enganche": 500,
"monto_a_financiar": 2000,
"intereses_calculados": 2200,
"precio_financiado": 4200,
"abono_semanal": 323,
"abono_semanal_ultimo": 324,
"abono_mensual": 1400,
"abono_mensual_ultimo": 1400,
"total_a_pagar": 4700
},
{
"offer_id": "w26-m6-i1.25-f4500-e500",
"semanas": 26,
"meses": 6,
"enganche": 500,
"monto_a_financiar": 2000,
"intereses_calculados": 2500,
"precio_financiado": 4500,
"abono_semanal": 173,
"abono_semanal_ultimo": 175,
"abono_mensual": 750,
"abono_mensual_ultimo": 750,
"total_a_pagar": 5000
},
{
"offer_id": "w39-m9-i1.5-f5000-e500",
"semanas": 39,
"meses": 9,
"enganche": 500,
"monto_a_financiar": 2000,
"intereses_calculados": 3000,
"precio_financiado": 5000,
"abono_semanal": 128,
"abono_semanal_ultimo": 136,
"abono_mensual": 555,
"abono_mensual_ultimo": 560,
"total_a_pagar": 5500
}
]
}offer.previewed.offer_id devueltos.{
"offerId": "w39-m9-i1.5-f5000-e500"
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"status": "Analisis crediticio cache completado",
"process": {
"state": "waiting",
"next_action": "wait_contract_signature",
"pause_reason": "contract_signature_pending",
"can_continue": false,
"checkpoints": {
"referencias_validadas": true,
"oferta_seleccionada": true,
"contrato_firmado": false,
"imei_validado": false
}
}
},
"producto": {
"marca": "Samsung",
"modelo": "Galaxy A06",
"prefijo": "SM-A065M"
},
"plan": {
"offer_id": "w39-m9-i1.5-f5000-e500",
"semanas": 39,
"meses": 9,
"enganche": 500,
"monto_a_financiar": 2000,
"intereses_calculados": 3000,
"precio_financiado": 5000,
"abono_semanal": 128,
"abono_semanal_ultimo": 136,
"abono_mensual": 555,
"abono_mensual_ultimo": 560,
"total_a_pagar": 5500
}
}offer.selected.contrato.contrato.template.name es el nombre del template de contrato; se recomienda enviarlo explicitamente y debe ser "Contrato Venta".response puede ser base64 o binary.base64, la API devuelve un JSON con base64 y data_url.{
"template": {
"name": "Contrato Venta"
},
"response": "base64"
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"status": "Analisis crediticio cache completado",
"rating": "A",
"score": 24,
"venta_con_inventario": false,
"referencias": {
"total": 1,
"aceptadas": 1,
"rechazadas": 0,
"pendientes": 0,
"minimo_cumplido": true
},
"producto": {
"marca": "Samsung",
"modelo": "Galaxy A06",
"prefijo": "SM-A065M"
},
"pricing": {
"precio": 2500,
"enganche": 500,
"porcentaje_enganche_aplicado": 0.08,
"monto_a_financiar": 2000,
"precio_financiado": 5000,
"total_a_pagar": 5500
},
"plan": {
"offer_id": "w39-m9-i1.5-f5000-e500",
"semanas": 39,
"meses": 9,
"total_a_pagar": 5500
},
"process": {
"state": "waiting",
"next_action": "wait_contract_signature",
"pause_reason": "contract_signature_pending",
"can_continue": false,
"checkpoints": {
"referencias_validadas": true,
"oferta_seleccionada": true,
"contrato_firmado": false,
"imei_validado": false
}
},
"notifications": {
"webhooks_registrados": 1
},
"updated_at": "2026-05-06T00:04:06.884Z"
},
"contrato": {
"template_name": "Contrato Venta",
"document": {
"mime_type": "application/pdf",
"file_name": "contrato-{{COTIZACION_ID}}.pdf",
"base64": "JVBERi0xLjQK...",
"data_url": "data:application/pdf;base64,JVBERi0xLjQK..."
}
}
}contrato_base64contrato_textofirmado_ensource para identificar el origen de la firma.contrato.{
"contrato_base64": "JVBERi0xLjQK...",
"firmado_en": "2026-04-21T18:30:00.000Z",
"contrato_texto": {
"acepto_terminos": true
},
"source": "partner-web"
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"status": "Analisis crediticio cache completado",
"rating": "A",
"score": 24,
"venta_con_inventario": false,
"referencias": {
"total": 1,
"aceptadas": 1,
"rechazadas": 0,
"pendientes": 0,
"minimo_cumplido": true
},
"producto": {
"marca": "Samsung",
"modelo": "Galaxy A06",
"prefijo": "SM-A065M"
},
"pricing": {
"precio": 2500,
"enganche": 500,
"porcentaje_enganche_aplicado": 0.08,
"monto_a_financiar": 2000,
"precio_financiado": 5000,
"total_a_pagar": 5500
},
"plan": {
"offer_id": "w39-m9-i1.5-f5000-e500",
"semanas": 39,
"meses": 9,
"total_a_pagar": 5500
},
"process": {
"state": "waiting",
"next_action": "wait_imei_validation",
"pause_reason": "imei_validation_pending",
"can_continue": false,
"checkpoints": {
"referencias_validadas": true,
"oferta_seleccionada": true,
"contrato_firmado": true,
"imei_validado": false
}
},
"notifications": {
"webhooks_registrados": 1
},
"updated_at": "2026-05-06T00:19:13.885Z"
},
"contrato": {
"firmado": true,
"signed_at": "2026-04-21T18:30:00.000Z"
}
}contract.signed.next_action sera wait_imei_validation.imei.xcel = false, la validacion del ICCID se maneja en modo manual.telefono_cliente es obligatorio.{
"iccid": "",
"imei": "359706680322897",
"telefono_cliente": "5512345678",
"xcel": false
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"status": "Analisis crediticio cache completado",
"rating": "A",
"score": 24,
"venta_con_inventario": false,
"referencias": {
"total": 1,
"aceptadas": 1,
"rechazadas": 0,
"pendientes": 0,
"minimo_cumplido": true
},
"producto": {
"marca": "Samsung",
"modelo": "Galaxy A06",
"prefijo": "SM-A065M"
},
"pricing": {
"precio": 2500,
"enganche": 500,
"porcentaje_enganche_aplicado": 0.08,
"monto_a_financiar": 2000,
"precio_financiado": 5000,
"total_a_pagar": 5500
},
"plan": {
"offer_id": "w39-m9-i1.5-f5000-e500",
"semanas": 39,
"meses": 9,
"total_a_pagar": 5500
},
"process": {
"state": "action_required",
"next_action": "continue",
"pause_reason": null,
"can_continue": true,
"checkpoints": {
"referencias_validadas": true,
"oferta_seleccionada": true,
"contrato_firmado": true,
"imei_validado": true
}
},
"notifications": {
"webhooks_registrados": 1
},
"updated_at": "2026-05-06T00:24:56.905Z"
},
"sim": {
"iccid": "",
"provider": "manual",
"valido": true,
"status": "manual",
"disponible": true,
"numero": "525512345678",
"numero_masked": "********5678",
"validated_at": "2026-05-06T00:24:42.300Z"
},
"imei": {
"imei": "359706680322897",
"provider": "xcel",
"status": null,
"brand": "Samsung",
"model": "SM-A065M",
"expected_model": "SM-A065M",
"msisdn": null,
"phone_source": "manual",
"is_samsung": true,
"enrollment_status": "Locked",
"validated_at": "2026-05-06T00:24:56.717Z",
"valido": true,
"numero": null,
"numero_masked": null
}
}tag del dispositivo y la clave_acceso correspondiente.tag es obligatorio.clave_acceso es obligatoria.tag o configuracion, segun el flujo interno alcanzado.{
"tag": "65534223",
"clave_acceso": "76069701"
}{
"cotizacion": {
"id": "{{COTIZACION_ID}}",
"status": "vendido",
"rating": "A",
"score": 24,
"venta_con_inventario": false,
"referencias": {
"total": 1,
"aceptadas": 1,
"rechazadas": 0,
"pendientes": 0,
"minimo_cumplido": true
},
"producto": {
"marca": "Samsung",
"modelo": "Galaxy A06",
"prefijo": "SM-A065M"
},
"pricing": {
"precio": 2600,
"enganche": 600,
"porcentaje_enganche_aplicado": 0.08,
"monto_a_financiar": 2000,
"precio_financiado": 4860,
"total_a_pagar": 5460
},
"plan": {
"offer_id": null,
"semanas": 26,
"meses": 6,
"total_a_pagar": 5460
},
"process": {
"state": "completed",
"next_action": "completed",
"pause_reason": null,
"can_continue": false,
"checkpoints": {
"referencias_validadas": true,
"oferta_seleccionada": true,
"contrato_firmado": true,
"imei_validado": true
}
},
"notifications": {
"webhooks_registrados": 0
},
"updated_at": "2026-05-06T22:30:38.611Z",
"stage": "vendido",
"dispositivos": "{{DISPOSITIVO_ID}}",
"financiamientos": "{{FINANCIAMIENTO_ID}}",
"ventas": "{{VENTA_ID}}",
"tag": "65534223"
},
"dispositivo": {
"id": "{{DISPOSITIVO_ID}}",
"tag": "65534223",
"status": "disponible",
"imei": "359706680322897",
"cotizacion_id": "{{COTIZACION_ID}}",
"financiamiento_id": "{{FINANCIAMIENTO_ID}}",
"venta_id": "{{VENTA_ID}}"
},
"financiamiento": {
"id": "{{FINANCIAMIENTO_ID}}",
"fecha_bloqueo": "2026-05-13T10:30:33.000Z",
"proceso_finalizado": true,
"public_api": true,
"proximo_pago": {
"fecha": "2026-05-13T04:30:32.000Z",
"monto": 186
},
"venta_id": "{{VENTA_ID}}"
},
"venta": {
"id": "{{VENTA_ID}}",
"fecha": "2026-05-06T16:30:33.000Z",
"monto": 2600,
"tipo_venta": "financiamiento",
"estado": "completada"
},
"samsung": {
"provider": "knox",
"success": false,
"unlock_pin": null,
"offline_lock_pin": {
"result": "SUCCESS",
"objectId": "{{KNOX_OBJECT_ID}}",
"requestedId": "359706680322897",
"pinNumber": ["83414641"]
},
"error": {
"message": {
"code": 4000310,
"message": "DEVICE_STATE_INVALID",
"reason": "Current status is 'Unlocking'."
},
"status": 400,
"data": {
"result": "FAIL",
"error": {
"code": 4000310,
"message": "DEVICE_STATE_INVALID",
"reason": "Current status is 'Unlocking'."
}
}
}
},
"recibo": {
"template_name": "Recibo Venta",
"document": {
"mime_type": "application/pdf",
"file_name": "recibo-venta-{{VENTA_ID}}.pdf",
"base64": "JVBERi0xLjQK...",
"data_url": "data:application/pdf;base64,JVBERi0xLjQK..."
}
}
}cotizacion.process.state queda en completed.cotizacion.process.next_action queda en completed.409 Conflict409 cuando se intenta usar un endpoint en una etapa incorrecta del flujo. Ejemplos comunes:No se puede acceder a esta accion en la etapa actual de la cotizacion422 Unprocessable Entity422 cuando el body es valido en forma, pero incumple reglas de negocio. Ejemplos:terminos_buro = true.rating.telefono_cliente faltante cuando xcel = false en ICCID.404 Not FoundprefijoId, marcaId o modeloId no existen o no estan relacionados.401 o 403sales-process:read o sales-process:write.cotizacion.id, offer_id, tag y venta.id en el sistema externo.next_action como fuente principal de control del flujo en vez de inferir el avance por status.POST y PATCH, firmar el body crudo exacto que se envia.samsung.error y recibo.error como informacion operativa adicional; no necesariamente significan que la venta no se cerro.cotizacion.id.identity_verification.url.wait_reference_validation.reference.accepted o next_action = select_offer.next_action = continue.tag y clave_acceso.process.state = completed.