CURP, INE, RFC, IMSS and more in a single API, straight from the official sources.
Everyone queries the same government sources. What changes is how we deliver it: storing nothing, one single contract, and built for whoever integrates.
The same official sources, assembled for the use case you already have. Each flow is a sequence of endpoints with the same envelope.
Each service has its own page: what it returns, real code, and a demo where it applies. Same envelope everywhere.
RENAPO
Validate CURP
Official status live, holder data and RFC in the same call · free demo
→
SAT
Validate RFC
SAT registry status and risk level (valid, restricted, not registered) · free demo
→
INE
OCR of INE
Data extracted from the photo and the address split into validated fields · real cases
→
INE
Validate INE
Lista Nominal status: current, stolen/lost, suspended, not registered · free demo
→
BIOMETRICS
Face match
Selfie against the ID photo: 0–100 score and a decision ready for your threshold · free simulator
→
IMSS
IMSS API
The three IMSS services compared: what each one answers, what you get and how much it costs
→
IMSS
Employment verification
From the CURP: whether they work today, with which employer, base salary and contributed days · optional official PDF
→
IMSS
Contribution weeks
The official PDF certificate, the full work history and stability and income signals, with their formula
→
IMSS
NSS lookup
The Social Security Number from the CURP, without asking your user for the card
→
GUIDE
Webhooks
How you receive the result of IMSS queries, explained step by step and without jargon
→
Every endpoint returns the same envelope: one clean, predictable JSON structure. Learn it once, integrate fast — your parser is a helper that works for every operation.
import { OrigoidApiClient } from "@origoid/sdk"; const client = new OrigoidApiClient({ apiKey: process.env.ORIGOID_API_KEY }); const result = await client.renapo.validateCurp({ curp: "TEST900101HDFRRN09", generateRfc: true, });
from origoid import OrigoID client = OrigoID(api_key=os.environ["ORIGOID_API_KEY"]) result = client.renapo.validate_curp( curp="TEST900101HDFRRN09", generate_rfc=True, )
import ( sdkgo "github.com/origoid/sdk-go" "github.com/origoid/sdk-go/client" "github.com/origoid/sdk-go/option" ) c := client.NewClient(option.WithAPIKey(os.Getenv("ORIGOID_API_KEY"))) result, err := c.Renapo.ValidateCurp(context.Background(), &sdkgo.ValidateCurpRequest{ Curp: "TEST900101HDFRRN09", GenerateRfc: sdkgo.Bool(true), })
curl -X POST https://api.origoid.com/mex/renapo/v1/curp-validations \ -H "x-api-key: $ORIGOID_API_KEY" \ -H "content-type: application/json" \ -d '{"curp": "TEST900101HDFRRN09", "generateRfc": true}'
{
"status": "OK",
"type": "SUCCESS",
"data": { "personalInfo": { "givenNames": "JUAN", … } },
"billable": true
}
Like a bag of minutes: you subscribe to a plan, receive credits every month, and each verification you make uses one. No hidden charges.
Very few queries use more than one credit — the per-endpoint detail lives in the documentation ↗
Pay per credit. Pick the plan that fits your volume and grow when you need to. Extra credits are billed at your plan's rate.
Try any endpoint in production with courtesy credits, no strings attached. Access is enabled after a brief validation of your company.
More than 200,000 verifications a month? Volume pricing and terms built for you.
Your verifications are measured in kilo → mega → giga → tera → peta. So are our plans.
All access — including the trial — goes through a brief validation of your company.
Your data passes through OrigoID only to be validated against the official source. We don't store the data you query. Your users' privacy is by design, not a promise.
transactionId identifies the operation without exposing personal data.