SAT API Integration in Mexico
Connect SAT fiscal data to your product via CIEC: key endpoints, JSON responses, continuous monitoring, and a technical FAQ — all in one hub.
Developer resources
Five resources, five purposes. Pick the one that matches where you are in your integration.
SAT Integration Hub
Start here: what the SAT API exposes, how CRiskCo abstracts SOAP/CIEC, and technical FAQ.
API Integration Guide
End-to-end walkthrough: authentication, integration models (Approve / White-label / Webhook), and the full endpoint catalog.
Go to pageCode Samples
Copy-paste snippets in Python, Node.js, and cURL for every common flow.
Go to pageTutorials
Step-by-step beginner guides: first request, authentication, and monitoring.
Go to pageAPI Docs
Complete technical reference: every endpoint, parameter, response schema, and error code.
Open docsWhat the SAT API exposes
Mexico's SAT (Servicio de Administración Tributaria) provides authenticated SOAP services to access taxpayer fiscal data. These include issued and received CFDIs, the 32-D compliance opinion, fiscal status certificate, tax regimes and obligations, the 69-B list (EFOS/EDOS), and RFC validation. Direct integration requires credential handling, XML/SOAP parsing, session token management, and handling SAT maintenance windows.
CRiskCo abstracts all that complexity behind a modern REST/JSON API with apiId/apiKey authentication, webhooks, automatic retries, and continuous monitoring. It's the standard way used by banks, SOFOMs, fintechs, and accounting firms in Mexico to connect SAT data to their systems.
SAT authorization methods: CIEC and e.firma
SAT allows two ways to authorize access to fiscal data. Here we explain both and which one CRiskCo uses today.
CRiskCo runs SAT onboarding with CIEC
We currently accept only the taxpayer's CIEC password. We do not require or store e.firma .cer/.key files. CIEC is sufficient for all services we offer: CFDI extraction, RFC validation, 32-D compliance opinion, fiscal certificate, FinScore, and continuous monitoring.
| Attribute | CIEC | e.firma |
|---|---|---|
| What it is | 8-character SAT password | Digital certificate (.cer + .key + password) |
| Validity | Indefinite (until the taxpayer changes it) | 4 years, renewable |
| Can sign documents | No | Yes (advanced electronic signature) |
| Read fiscal data | Yes (CFDI, RFC, regimes, 32-D opinion, certificate) | Yes (same data) |
| Supported by CRiskCo today | Yes | No |
Onboarding flow (CIEC)
- 1Collect RFC, CIEC password, email, and terms acceptance from the taxpayer.
- 2Call POST /OnboardingSatIntegration with the payload {IsAgreeTerms, DateAgreeTerms, VersionAgreeTerms, Email, User, Password, RefApplicantId}.
- 3Poll GET /get-applicants?taxId=RFC&onboardingStatus=true every 5–10 seconds until status='Available'.
- 4Call data endpoints: /applicantinfo, /GetCompanyTaxStatus, /GetCompanyFiscalDetails, /GetHistoricalFinscore.
- 5Register a webhook with POST /Subscriptions to receive automatic updates.
Runnable snippets at Code Samples.
Key endpoints with JSON responses
Base URL: https://service.criskco.com/apiservice.svc. Required headers on every call: apiId, apiKey, Content-Type: application/json.
OnboardingSatIntegration
Applicant onboarding with their CIEC password.
POST /apiservice.svc/OnboardingSatIntegration
Headers: apiId, apiKey, Content-Type: application/json
{
"IsAgreeTerms": true,
"DateAgreeTerms": "2026-04-16",
"VersionAgreeTerms": "1",
"Email": "contact@empresa.com",
"User": "GAPXXXXXXXXX",
"Password": "CIEC_PASSWORD",
"RefApplicantId": "loan-app-00482"
}
{
"success": true,
"applicantId": "1000143693",
"RefApplicantId": "loan-app-00482",
"message": "Applicant onboarding initiated"
}
GET /get-applicants
List applicants and their onboarding status (poll after OnboardingSatIntegration).
GET /apiservice.svc/get-applicants?taxId=GAPXXXXXXXXX&onboardingStatus=true
Query params: refApplicantId · taxId · onboardingStatus · fullResponse
{
"responseDetails": "Data retrieved successfully",
"success": true,
"ApiApplicantData": {
"applicantId": "1000143693",
"taxId": "GAPXXXXXXXXX",
"onboardingStatus": "Available"
}
}
// Use fullResponse=true for the complete dataset (financials, blackLists).
// See full schema at api-docs.criskco.com.
GET /ValidateRFC
Validates a single RFC against SAT (existence, status, and name match).
GET /apiservice.svc/ValidateRFC?rfc=GAPXXXXXXXXX&name=GAP&postal=06600
{
"Success": true,
"message": "RFC valid and active",
"rfc": "GAPXXXXXXXXX"
}
POST /ValidateRFCBulk
Bulk validation: up to 5,000 RFCs in one call (plain text, one RFC per line).
POST /apiservice.svc/ValidateRFCBulk
Headers: apiId, apiKey
Content-Type: multipart/form-data
file=@rfcs.txt // one RFC per line, or RFC|Name|Postal pipe-separated
// Returns plain-text results, one line per RFC.
// See API Docs for the exact format and runnable snippets in Code Samples.
GET /GetCompanyTaxStatus
Compliance Opinion (32-D). Returns PayingTax (POSITIVO/NEGATIVO) and pending obligations.
GET /apiservice.svc/GetCompanyTaxStatus?taxId=GAPXXXXXXXXX
{
"CompanyTaxStatus": [
{
"taxId": "GAPXXXXXXXXX",
"PayingTax": "NEGATIVO",
"RetrievedAt": "2026-04-15T08:30:00Z",
"CompanyObligationsList": [
{ "Obligation": "ISR Mensual", "Month": 2, "Year": 2026 },
{ "Obligation": "IVA Mensual", "Month": 2, "Year": 2026 }
]
}
]
}
GET /GetCompanyFiscalDetails
Fiscal Status Certificate: legal name, regimes, obligations, and fiscal address.
GET /apiservice.svc/GetCompanyFiscalDetails?taxId=GAPXXXXXXXXX
// Shape varies. See full reference at api-docs.criskco.com.
// Includes: legalName, regimes[], obligations[], fiscalAddress, registrationDate.
GET /GetHistoricalFinscore
Monthly history of the FinScore (CRiskCo's proprietary credit model).
GET /apiservice.svc/GetHistoricalFinscore?taxId=GAPXXXXXXXXX
// Returns a HistoricalFinscores array with monthly entries
// (Year, Month, FinScore). See full schema at api-docs.criskco.com.
POST /Subscriptions
Register a webhook to receive applicant updates (FileType: JSON or JSON_LINK).
POST /apiservice.svc/Subscriptions
Headers: apiId, apiKey, Content-Type: application/json
{ "CallbackUrl": "https://yourdomain.com/webhooks/criskco" }
// CRiskCo issues a GET to CallbackUrl for validation —
// your server must reply HTTP 200 within 2 seconds.
{
"success": true,
"responseDetails": "Subscription 1 created successfully",
"ApiSubscriptionData": [
{
"Active": true,
"CallbackUrl": "https://yourdomain.com/webhooks/criskco",
"ReferrerId": "your_referrer_id",
"SubscriptionId": 1
}
]
}
Full endpoint catalog in the API Integration Guide and detailed reference at api-docs.criskco.com.
Frequently asked questions
Technical answers to the most common questions about integrating with the SAT API.
Ready to integrate the SAT API
Get free sandbox credentials and start testing in minutes. No credit card required.