Cómo funciona la API
La API de CRiskCo es centrada en el aplicante. Antes de consultar datos financieros o de cumplimiento, el negocio (el "Aplicante") debe ser onboardeado — ya sea a través de tu propia UI vía API, la página de landing white-label de CRiskCo, o mediante webhooks basados en eventos.
Tres conceptos clave:
- Credit Provider — tu plataforma, llamando a la API usando apiId y apiKey.
- Applicant — el negocio aplicando a crédito. Autorizan acceso de CRiskCo a sus datos del SAT.
- Customer — un negocio que es cliente del Aplicante (usado para análisis de contraparte).
Autenticación
Todas las solicitudes requieren estos headers en cada llamada:
apiId: YOUR_API_ID
apiKey: YOUR_API_KEY
Content-Type: application/json
apiId y apiKey son emitidos por CRiskCo al registrarte. Las llaves de prueba retornan datos sandbox y no generan costo. No hay cambio de entorno — usa la llave correcta para el modo correcto.
Obtén tus credenciales de sandbox: Regístrate en api-docs.criskco.com → recibe apiId + apiKey por email.
Modelos de Integración
CRiskCo soporta tres modelos de integración. Elige según cuánto control necesites sobre la experiencia de onboarding.
| Modelo | Onboarding gestionado por | Uso API | Mejor para |
|---|---|---|---|
| Approve API | Partner (tu UI) | Completo — registro, obtención de datos | Bancos y fintechs que quieren control total de UX |
| White-Label | CRiskCo (página hosted) | Mínimo — estado + obtención de datos | Despliegue rápido, mínimo trabajo frontend |
| Webhook | Basado en eventos | Gestión de /Subscriptions | Automatización en tiempo real, underwriting automatizado |
Modelo A — Approve API (Control Total)
Recoges las credenciales RFC y CIEC del aplicante en tu propia UI y las envías a CRiskCo vía API.
Flujo:
- Tu app recopila RFC + CIEC del aplicante.
POST /OnboardingSatIntegrationpara registrar al aplicante y conectar al SAT.GET /get-applicantspara verificaronboardingStatus: "Available".POST /applicantinfou otros endpoints para obtener datos.
Paso 1 — Onboarding vía API
POST https://service.criskco.com/apiservice.svc/OnboardingSatIntegration
Headers: apiId, apiKey, Content-Type: application/json
{
"IsAgreeTerms": true,
"DateAgreeTerms": "2026-03-24",
"VersionAgreeTerms": "1",
"Email": "contact@empresa.com",
"User": "GAPXXXXXXXXX",
"Password": "CIEC_PASSWORD",
"RefApplicantId": "your-internal-ref-123"
}
| Campo | Requerido | Descripción |
|---|---|---|
| IsAgreeTerms | ✅ | El aplicante aceptó los términos de CRiskCo |
| DateAgreeTerms | ✅ | Fecha de aceptación (ISO 8601) |
| VersionAgreeTerms | ✅ | Versión de términos |
| ✅ | Email del aplicante | |
| User | ✅ | RFC del aplicante |
| Password | ✅ | CIEC del aplicante (contraseña SAT) |
| RefApplicantId | ❌ | Tu referencia interna |
Modelo B — Fintech Solution (Página Hosted)
Rediriges al aplicante a la página de onboarding de CRiskCo. CRiskCo maneja la conexión y validación SAT. Obtienes datos vía API una vez que el estado es Available.
Opción 1 — Página de onboarding general (sin configuración white-label)
Dirige a tus aplicantes a la página estándar de onboarding de CRiskCo y pídeles que ingresen tu código de referencia registrado cuando se les solicite:
https://app.criskco.com/onboarding/#!/app/referrer-es
El aplicante ingresa tu código de referencia durante el flujo. CRiskCo asocia el onboarding completado con ese código, que puedes usar para consultar el estado.
Opción 2 — Página de onboarding white-label (requiere configuración con CRiskCo)
Si CRiskCo ha provisionado una instancia white-label para tu marca, tu URL dedicada será:
https://yourbrand.criskco.com/onboarding/#!/app/
Reemplaza yourbrand con el subdominio asignado por CRiskCo.
En ambos casos, una vez completado el onboarding, consulta el aplicante usando tu código de referencia:
GET /get-applicants?refApplicantId=YOUR_SUBSCRIPTION_ID
No requiere desarrollo frontend. CRiskCo gestiona la integración SAT y el manejo de credenciales.
Modelo C — Webhook (Basado en Eventos)
En lugar de hacer polling por estado, CRiskCo envía actualizaciones a tu servidor en el momento en que están listas. Este es el modelo recomendado para plataformas de underwriting automatizado.
POST https://service.criskco.com/apiservice.svc/Subscriptions
Headers: apiId, apiKey, Content-Type: application/json
{ "CallbackUrl": "https://yourdomain.com/webhooks/criskco" }
Validación: Después de recibir tu solicitud de suscripción, CRiskCo envía inmediatamente un GET a tu CallbackUrl. Tu servidor debe responder con HTTP 200 OK en 2 segundos.
Respuesta exitosa de registro:
{
"success": true,
"responseDetails": "Subscription 1 created successfully",
"ApiSubscriptionData": [
{
"Active": true,
"CallbackUrl": "https://yourdomain.com/path/webhook",
"ReferrerId": "your_referrer_id",
"SubscriptionId": 1
}
]
}
Payload del Webhook — JSON Inline
Cuando fileResponse es false, CRiskCo envía el payload directamente en el cuerpo del webhook:
{
"SubscriptionId": 1,
"ReferrerId": "criskco_partner",
"WebhookUrl": "https://yourdomain.com/path/webhook",
"ApiServiceName": "GetApplicants",
"FileType": "JSON",
"DownloadUrlList": null,
"applicantId": "123456”,
"refApplicantId": "abc-def”,
"APIResponse": "{ "applicantId": "123456", "onboardingStatus": "Available", ... }"
}
Payload del Webhook — Link Descargable
Cuando fileResponse es true, CRiskCo almacena el JSON y envía una URL de descarga en su lugar:
{
"SubscriptionId": 1,
"ReferrerId": "criskco_partner",
"WebhookUrl": "https://yourdomain.com/path/webhook",
"ApiServiceName": "GetApplicants",
"FileType": "JSON_LINK",
"DownloadUrlList": [
"https://criskco-files.s3.amazonaws.com/..."
],
"applicantId": "123456”,
"refApplicantId": "abc-def”,
"APIResponse": null
}
La forma del payload es idéntica en ambos modos. FileType te dice si parsear APIResponse directamente o descargar de DownloadUrlList.
Gestionar Suscripciones
Listar todas las suscripciones activas:
GET https://service.criskco.com/apiservice.svc/Subscriptions
Headers: apiId, apiKey
Eliminar una suscripción:
POST https://service.criskco.com/apiservice.svc/Subscriptions?id=YOUR_SUBSCRIPTION_ID
Headers: apiId, apiKey
Obtener Aplicantes y Verificar Estado
Sin importar qué modelo de integración uses, obtén el applicantId aquí. Es requerido para todos los endpoints de datos financieros.
GET https://service.criskco.com/apiservice.svc/get-applicants
Headers: apiId, apiKey
| Parámetro | Descripción |
|---|---|
| taxId | Filtrar por RFC |
| refApplicantId | Filtrar por tu referencia interna |
| onboardingStatus | Incluir estado de onboarding (true/false) |
| fullResponse | Dataset completo incluyendo financieros y blacklists (true/false). Usar solo cuando sea necesario — agrega latencia. |
Respuesta de Ejemplo
{
"responseDetails": "Data retrieved successfully",
"success": true,
"ApiApplicantData": {
"applicantId": "1000143693",
"taxId": "GAPXXXXXXXXX",
"dateConnected": "2026-03-24T09:15:00Z",
"onboardingStatus": "Available",
"financials": { ... },
"blackLists": ["SAT", "OFAC"]
}
}
Estados de Onboarding
| Estado | Significado |
|---|---|
| Available | Conectado y datos procesados — listo para consultar |
| Processing | Conectado pero datos aún en procesamiento |
| Not Connected | El aplicante aún no ha completado el onboarding |
blackLists: Retornado cuando fullResponse=true. Lista las fuentes de blacklist donde el aplicante tiene una bandera (e.g. "SAT" = EFOS/EDOS, "OFAC" = sanciones de EE.UU.).
Validación de RFC
RFC Individual
GET /ValidateRFC?rfc=GAPXXXXXXXXX&name=GAP&postal=12345
Params: rfc (required) · name (optional) · postal (optional)
Response:
{
"Success": true,
"ValidParameters": [
{ "Property": "ValidRFC", "Valid": true },
{ "Property": "ValidName", "Valid": true },
{ "Property": "ValidPostal", "Valid": true }
],
"message": "RFC válido, y susceptible de recibir facturas"
}
Validación Masiva (hasta 5,000)
Envía un archivo de texto con un RFC por línea, o RFC|Nombre|CP separados por pipe.
POST /ValidateRFCBulk
Body: plain-text file
RFC only:
ABCYYYYYYYYYY
DEFZZZZZZZZZZ
RFC + Name + Postal (pipe-separated):
ABCYYYYYYYYYY|EMPRESA ABC|98765
DEFZZZZZZZZZZ|EMPRESA DEF|12345
Endpoints de Cumplimiento SAT
Estos endpoints consultan por taxId (RFC) — no se requiere applicantId.
Estado Fiscal (Opinión de Cumplimiento)
GET /GetCompanyTaxStatus?taxId=GAPXXXXXXXXX
Returns POSITIVO or NEGATIVO plus outstanding obligations (populated only when NEGATIVO).
| Campo | Tipo | Descripción |
|---|---|---|
| RFC | string | Tax ID |
| PayingTax | string | "POSITIVO" or "NEGATIVO" |
| CompanyObligationsList | array | Obligaciones pendientes si NEGATIVO |
| ReportUpdateDate | date | Fecha del reporte |
Regímenes Fiscales
GET /GetCompanyTaxRegimes?taxId=GAPXXXXXXXXX
Returns: RFC, Regime, ReportUpdateDate, PayingTax
Constancia De Fiscal
GET /GetCompanyFiscalDetails?taxId=GAPXXXXXXXXX
Returns: RFC, Name, FirstSurname, SecondSurname, CompanyName, CapitalRegime,
CommercialName, OperationStartDate, FiscalStatus, LastStatusChangeDate,
FiscalRegisteredAddress
FinScore Histórico
GET /GetHistoricalFinscore?taxId=GAPXXXXXXXXX
{
"HistoricalFinscores": [
{ "Year": 2025, "Month": 10, "FinScore": 68.2 },
{ "Year": 2025, "Month": 11, "FinScore": 70.4 },
{ "Year": 2026, "Month": 1, "FinScore": 74.0 }
]
}
Datos Financieros del Aplicante
Todos los endpoints financieros son POST con { "applicantId": "..." }. Parámetros opcionales fromDate/toDate filtran por fecha (ISO 8601).
Información del Aplicante (Resumen)
POST /applicantinfo
{ "applicantId": "1000143693" }
Returns verified business info, blacklist status, and summarized financials.
Clientes y Transacciones AR
| Method | Endpoint | Descripción |
|---|---|---|
| POST | /customers | Lista de clientes + financieros |
| POST | /ar-transactions/invoices | Facturas de venta |
| POST | /ar-transactions/payments | Pagos recibidos |
| POST | /ar-transactions/creditmemos | Notas de crédito emitidas |
| POST | /grouping/customers | Todos los datos AR en una llamada |
Proveedores y Transacciones AP
| Method | Endpoint | Descripción |
|---|---|---|
| POST | /suppliers | Lista de proveedores + financieros |
| POST | /ap-transactions/invoices | Facturas de proveedores |
| POST | /ap-transactions/payments | Pagos a proveedores |
| POST | /ap-transactions/creditmemos | Notas de crédito de proveedores |
| POST | /ap-transactions/expenses | Gastos no facturados |
| POST | /grouping/suppliers | Todos los datos AP en una llamada |
Reportes Financieros
Reportes raw — como aparecen en el ERP del aplicante:
POST /financialreports/rowdata/balancesheet
POST /financialreports/rowdata/profitandloss
POST /financialreports/rowdata/bankstatement
{ "applicantId": "1000143693" }
Reportes estandarizados — normalizados por CRiskCo:
POST /financialreports/standard/balancesheet
POST /financialreports/standard/profitandloss
{ "applicantId": "1000143693", "financialYear": "Current" }
financialYear options:
Current · FinancialYearEnd · PreviousFinancialYearEnd ·
SecondPreviousFinancialYearEnd · ThirdPreviousFinancialYearEnd
Todos los Financieros en Una Llamada
POST /grouping/applicant-financials
{ "applicantId": "1000143693", "csvInJson": false }
Returns raw data, standardized reports, documents, analytics, and summaries.
Recommended for initial data pulls.
Documentos
POST /Documents
{ "applicantId": "1000143693", "csvInJson": false }
| report_type | Descripción |
|---|---|
| SAT_FINANCIAL_DECLARATION | Declaraciones anuales presentadas al SAT |
| SAT_CONTRIBUYENTE | Opinión de Contribuyente del SAT |
| SAT_ANALYTICS | Reporte resumido de empresa por CRiskCo |
| APPLICANT_FILES | Archivos subidos durante el onboarding |
| MONTHLY_GENERATED_REPORT | Reporte mensual por CRiskCo |
Cada documento incluye un link de descarga HTTP directo.
Endpoints SAT Adicionales
Estructura de Propiedad
GET /GetCompanyStructure?taxId=GAPXXXXXXXXX
Returns: owner names, RFC, country, participation % (with/without vote),
tenure periods, loans, capital movements.
Detalles de Nómina
GET /GetPayrollDetails?taxId=GAPXXXXXXXXX
Detalles de Empleados
GET /GetEmployeesDetails?taxId=GAPXXXXXXXXX
Returns: name, RFC, CURP, position, start date, total work months,
payment frequency, days paid, gross salary.
Antecedentes Judiciales
GET /GetInformationReport?taxId=GAPXXXXXXXXX
Returns AntecedentesJudiciales grouped by state, with case numbers,
dates, and court references.
Salud del SAT
GET /SatHealthCheck?serviceName=Declarations&systemType=SAT&unitType=Hours&unitAmount=24
Returns avg/max response times, failure rates, and HTTP status codes per check.
Use before making SAT-dependent calls to diagnose upstream issues.
Gestión del Ciclo de Vida
Actualizar Estado del Aplicante
POST /applicant-status
{ "applicantId": "1000143693", "status": "Approved" }
Statuses: New | UnderEvaluation | Approved | Denied | CancelByApplicant | CompanyDefaulted | Completed
Los estados de desconexión detienen la sincronización de datos SAT. Volver a un estado conectado dispara un intento de reconexión.
Disparar Actualización de Monitoreo
POST /RequestMonitoring
{ "applicantId": "1000143693", "Source": "API" }
Forces a fresh SAT data pull for an applicant already in your system.
Mejores Prácticas
- Siempre usa HTTPS. Nunca expongas tu apiKey del lado del cliente.
- Valida las llamadas webhook entrantes para prevenir spoofing — verifica que las solicitudes provengan de las IPs de CRiskCo.
- Implementa lógica de reintento con backoff exponencial.
- Almacena applicantId localmente en tu LOS — lo usarás en cada llamada subsecuente.
- Usa fullResponse=true solo cuando sea necesario — agrega latencia.
- Verifica onboardingStatus Available antes de consultar endpoints financieros — consultar mientras está Processing retorna datos incompletos.
- Para pipelines automatizados, usa el modelo Webhook en lugar de polling.
Referencia Completa de Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /get-applicants | Listar aplicantes, obtener applicantId y estado |
| POST | /OnboardingSatIntegration | Onboarding de aplicante (Modelo A) |
| POST | /applicantinfo | Datos financieros y de negocio |
| GET | /ValidateRFC | Validar un RFC contra el SAT |
| POST | /ValidateRFCBulk | Validar hasta 5,000 RFCs |
| GET | /GetCompanyTaxStatus | Opinión de Cumplimiento |
| GET | /GetCompanyTaxRegimes | Regímenes fiscales |
| GET | /GetCompanyFiscalDetails | Constancia De Fiscal |
| GET | /GetHistoricalFinscore | Historial de FinScore |
| GET | /GetCompanyStructure | Estructura de propiedad |
| GET | /GetPayrollDetails | Registros de nómina |
| GET | /GetEmployeesDetails | Lista de empleados |
| GET | /GetInformationReport | Antecedentes judiciales |
| GET | /SatHealthCheck | Disponibilidad y latencia del SAT |
| POST/GET | /Subscriptions | Gestionar webhooks |
| POST | /customers | Lista de clientes + financieros |
| POST | /ar-transactions/invoices | Facturas de venta (AR) |
| POST | /ar-transactions/payments | Pagos recibidos (AR) |
| POST | /ar-transactions/creditmemos | Notas de crédito emitidas (AR) |
| POST | /grouping/customers | Todos los datos AR en una llamada |
| POST | /suppliers | Lista de proveedores + financieros |
| POST | /ap-transactions/invoices | Facturas de proveedores (AP) |
| POST | /ap-transactions/payments | Pagos a proveedores (AP) |
| POST | /ap-transactions/creditmemos | Notas de crédito de proveedores (AP) |
| POST | /ap-transactions/expenses | Gastos no facturados |
| POST | /grouping/suppliers | Todos los datos AP en una llamada |
| POST | /financialreports/rowdata/balancesheet | Balance general (raw) |
| POST | /financialreports/rowdata/profitandloss | Estado de resultados (raw) |
| POST | /financialreports/rowdata/bankstatement | Estado de cuenta bancario |
| POST | /financialreports/standard/balancesheet | Balance general estandarizado |
| POST | /financialreports/standard/profitandloss | Estado de resultados estandarizado |
| POST | /Documents | Documentos (declaraciones, reportes) |
| POST | /grouping/applicant-financials | Todos los datos financieros en una llamada |
| POST | /applicant-status | Actualizar estado del aplicante |
| POST | /RequestMonitoring | Forzar actualización de datos SAT |