{"openapi":"3.1.0","info":{"title":"Mexico Agent Toolkit","version":"1.0.0","description":"Pay-per-call Mexico utilities for AI agents over x402 (USDC on Base). No accounts, no API keys. Mexican RFC validation (offline), SAT 69-B (EFOS) lookup by RFC, and a paid personas-morales supplier dossier (art. 69, CSD sin efectos, 69-B, 69-B Bis, padrón de importadores). Data: SAT datos abiertos, 69-B cut-off 2026-09-30. Not an official SAT service and not endorsed by the SAT. / No es un servicio oficial del SAT ni está avalado por el SAT. Privacy notice: /privacy","x-guidance":"Use when a task involves a Mexican supplier or invoice (CFDI): validate the supplier's RFC offline, check whether the RFC is on the SAT 69-B list (Presunto/Definitivo = invoices with no tax effect), or get a single ok/review/fail supplier verdict. All endpoints are GET with ?rfc=. You are only charged on HTTP 200. Lookup by RFC only."},"servers":[{"url":"https://mx.redtapeapi.com"}],"externalDocs":{"description":"Privacy notice (aviso de privacidad LFPDPPP + GDPR)","url":"https://mx.redtapeapi.com/privacy"},"paths":{"/v1/mx/rfc/validate":{"get":{"operationId":"mx_rfc_validate","summary":"Validate a Mexican RFC (Registro Federal de Contribuyentes) offline: format (persona moral 12 chars, persona física 13), the YYMMDD date part, the homoclave check digit (SAT mod-11), and the generic RFCs XAXX010101000 / XEXX010101000; plus a cross-check against the SAT 69-B list (operaciones presuntamente inexistentes / EFOS)","description":"Validate a Mexican RFC (Registro Federal de Contribuyentes) offline: format (persona moral 12 chars, persona física 13), the YYMMDD date part, the homoclave check digit (SAT mod-11), and the generic RFCs XAXX010101000 / XEXX010101000; plus a cross-check against the SAT 69-B list (operaciones presuntamente inexistentes / EFOS). Does not prove the RFC is registered with the SAT. Stores and logs nothing. 69-B data: SAT, Listado completo 69-B, datos abiertos (Libre Uso MX); not an official SAT service.\n\nES: Valida un RFC sin conexión (formato moral 12 / física 13, fecha AAMMDD, dígito verificador, RFC genéricos) y lo cruza con la lista 69-B del SAT. No confirma que el RFC esté inscrito. No guarda ni registra nada.\n\nPrice: $0.002 USDC per successful call via x402 (eip155:8453). Failed calls (4xx/5xx) are never charged.","tags":["Mexico"],"parameters":[{"name":"rfc","in":"query","required":true,"description":"RFC, 12 (persona moral) or 13 (persona física) characters","schema":{"type":"string"},"example":"EKU9003173C9"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"normalized":"EKU9003173C9","valid":true,"type":"persona_moral","checks":{"format":true,"date":true,"checkDigit":true},"sat69b":{"listed":false,"situation":null,"dataCutoff":"2026-09-30"}}}}},"400":{"description":"Invalid input (never charged)"},"402":{"description":"Payment Required"}}}},"/v1/mx/sat/69b":{"get":{"operationId":"mx_sat_69b","summary":"Look up one RFC in the SAT 69-B complete list (Mexico, art","description":"Look up one RFC in the SAT 69-B complete list (Mexico, art. 69-B CFF: taxpayers presumed to invoice non-existent operations, EFOS). Returns whether it is listed and its full situation (Presunto, Desvirtuado, Definitivo, Sentencia Favorable) with the oficio numbers and SAT/DOF publication dates exactly as in the SAT CSV, the data cut-off date and the source citation. Lookup by RFC only (no name search, no bulk). Persona física names are not returned. Source: SAT, Listado completo 69-B, datos abiertos, Libre Uso MX. Not an official SAT service.\n\nES: Consulta un RFC en el listado completo 69-B del SAT (EFOS): situación (Presunto, Desvirtuado, Definitivo, Sentencia Favorable), oficios y fechas de publicación tal como vienen en el CSV del SAT, fecha de corte y fuente. Solo por RFC; sin búsqueda por nombre ni descarga masiva.\n\nPrice: $0.005 USDC per successful call via x402 (eip155:8453). Failed calls (4xx/5xx) are never charged.","tags":["Mexico"],"parameters":[{"name":"rfc","in":"query","required":true,"description":"RFC to look up (12 or 13 characters)","schema":{"type":"string"},"example":"EKU9003173C9"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"rfc":"EKU9003173C9","listed":false,"situation":null,"records":[],"source":{"source":"SAT, Listado completo 69-B, datos abiertos, Libre Uso MX","dataCutoff":"2026-09-30"}}}}},"400":{"description":"Invalid input (never charged)"},"402":{"description":"Payment Required"}}}},"/v1/mx/supplier/precheck":{"get":{"operationId":"mx_supplier_precheck","summary":"One-call Mexican supplier pre-check before paying or deducting a CFDI: offline RFC validation (format, date, check digit, generic RFCs) plus the SAT 69-B status, with a verdict ok/review/fail and reasons (Definitivo = fail, Presunto or a previously listed RFC = review, invalid RFC = fail)","description":"One-call Mexican supplier pre-check before paying or deducting a CFDI: offline RFC validation (format, date, check digit, generic RFCs) plus the SAT 69-B status, with a verdict ok/review/fail and reasons (Definitivo = fail, Presunto or a previously listed RFC = review, invalid RFC = fail). Does not query CFDI status. Source: SAT, Listado completo 69-B, datos abiertos, Libre Uso MX. Not an official SAT service; not tax advice.\n\nES: Precheck de proveedor: RFC + 69-B con veredicto ok/review/fail y motivos (Definitivo o RFC inválido = fail; Presunto, Desvirtuado o Sentencia Favorable = review). No consulta el estado del CFDI. No es asesoría fiscal.\n\nPrice: $0.008 USDC per successful call via x402 (eip155:8453). Failed calls (4xx/5xx) are never charged.","tags":["Mexico"],"parameters":[{"name":"rfc","in":"query","required":true,"description":"Supplier RFC (12 or 13 characters)","schema":{"type":"string"},"example":"EKU9003173C9"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.008000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"rfc":"EKU9003173C9","verdict":"ok","issues":[],"rfcCheck":{"valid":true,"type":"persona_moral"},"sat69b":{"listed":false,"situation":null}}}}},"400":{"description":"Invalid input (never charged)"},"402":{"description":"Payment Required"}}}},"/v1/mx/supplier/dossier":{"get":{"operationId":"mx_supplier_dossier","summary":"Personas morales only","description":"Personas morales only. Supplier dossier that adds the SAT art. 69 lists (firmes, exigibles, no localizados, sentencias; cancelados as context), CSD sin efectos (a negative list, not a full certificate status), the full 69-B proceeding history, 69-B Bis, and the importer/exporter padrón (active registration and sectors are positive context; absence is not a finding; suspension is). Returns an explainable score that is the maximum signal, not a sum, plus each source cut-off. It does not replace a SAT opinión de cumplimiento and does not check whether the RFC is registered. 13-character (persona física) RFCs are rejected. Not an official SAT service.\n\nES: Solo personas morales. Expediente de proveedor: art. 69 (firmes, exigibles, no localizados, sentencias; cancelados solo como contexto), CSD sin efectos, historial 69-B, 69-B Bis y padrón de importadores/exportadores (el alta y los sectores son contexto; la ausencia no penaliza; la suspensión sí). Puntuación = la señal más alta, no la suma. No sustituye una opinión de cumplimiento del SAT. Rechaza RFC de persona física.\n\nPrice: $0.03 USDC per successful call via x402 (eip155:8453). Failed calls (4xx/5xx) are never charged.","tags":["Mexico"],"parameters":[{"name":"rfc","in":"query","required":true,"description":"Persona moral RFC, 12 characters. Persona física (13) is rejected.","schema":{"type":"string"},"example":"EKU9003173C9"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"rfc":"EKU9003173C9","entityType":"persona_moral","rfcValidation":{"formatValid":true,"satRegistrationVerified":false},"legalName":null,"checks":{"sat69":{"status":"not_listed","findings":[]},"csdWithoutEffects":{"status":"not_listed","findings":[]},"sat69b":{"status":"not_listed","proceedings":[]},"sat69bBis":{"status":"not_listed","proceedings":[]},"importers":{"status":"not_listed","registrations":[],"suspensions":[],"absenceIsNotAFinding":true}},"risk":{"score":0,"modelVersion":"2026-11-07.1","method":"max","reasons":["Score 0 means no penalizing signals in the consulted lists, not that the supplier is safe."],"coverageComplete":true,"staleOrMissingSources":[]},"warnings":["No sustituye una opinión de cumplimiento del SAT"]}}}},"400":{"description":"Invalid input (never charged)"},"402":{"description":"Payment Required"}}}},"/free/v1/mx/sat/69b":{"get":{"operationId":"free_mx_sat_69b","security":[],"summary":"Free tier (20/day per client): Look up one RFC in the SAT 69-B complete list (Mexico, art","description":"Same as GET /v1/mx/sat/69b, free for the first 20 calls per client per UTC day (all free routes together). Response header X-Free-Remaining shows what is left. When the quota is used up this URL returns the normal x402 402 challenge for /v1/mx/sat/69b ($0.005 USDC), so an x402 client can pay and retry.","tags":["Mexico","Free tier"],"parameters":[{"name":"rfc","in":"query","required":true,"description":"RFC to look up (12 or 13 characters)","schema":{"type":"string"},"example":"EKU9003173C9"}],"responses":{"200":{"description":"Successful response (free)","content":{"application/json":{"schema":{"type":"object"},"example":{"rfc":"EKU9003173C9","listed":false,"situation":null,"records":[],"source":{"source":"SAT, Listado completo 69-B, datos abiertos, Libre Uso MX","dataCutoff":"2026-09-30"}}}}},"400":{"description":"Invalid input (does not use quota)"},"402":{"description":"Free quota used up: x402 Payment Required for the paid route"}}}},"/free/v1/mx/rfc/validate":{"get":{"operationId":"free_mx_rfc_validate","security":[],"summary":"Free tier (20/day per client): Validate a Mexican RFC (Registro Federal de Contribuyentes) offline: format (persona moral 12 chars, persona física 13), the YYMMDD date part, the homoclave check digit (SAT mod-11), and the generic RFCs XAXX010101000 / XEXX010101000; plus a cross-check against the SAT 69-B list (operaciones presuntamente inexistentes / EFOS)","description":"Same as GET /v1/mx/rfc/validate, free for the first 20 calls per client per UTC day (all free routes together). Response header X-Free-Remaining shows what is left. When the quota is used up this URL returns the normal x402 402 challenge for /v1/mx/rfc/validate ($0.002 USDC), so an x402 client can pay and retry.","tags":["Mexico","Free tier"],"parameters":[{"name":"rfc","in":"query","required":true,"description":"RFC, 12 (persona moral) or 13 (persona física) characters","schema":{"type":"string"},"example":"EKU9003173C9"}],"responses":{"200":{"description":"Successful response (free)","content":{"application/json":{"schema":{"type":"object"},"example":{"normalized":"EKU9003173C9","valid":true,"type":"persona_moral","checks":{"format":true,"date":true,"checkDigit":true},"sat69b":{"listed":false,"situation":null,"dataCutoff":"2026-09-30"}}}}},"400":{"description":"Invalid input (does not use quota)"},"402":{"description":"Free quota used up: x402 Payment Required for the paid route"}}}},"/mcp":{"post":{"operationId":"mcp","security":[],"summary":"Remote MCP server (Streamable HTTP, JSON-RPC): free-tier tools mx_sat_69b_lookup and mx_rfc_validate","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"JSON-RPC response"}}}},"/health":{"get":{"operationId":"health","security":[],"summary":"Free: /health","responses":{"200":{"description":"OK"}}}},"/llms.txt":{"get":{"operationId":"llmstxt","security":[],"summary":"Free: /llms.txt","responses":{"200":{"description":"OK"}}}},"/openapi.json":{"get":{"operationId":"openapijson","security":[],"summary":"Free: /openapi.json","responses":{"200":{"description":"OK"}}}},"/status/sat69b":{"get":{"operationId":"statussat69b","security":[],"summary":"Free: /status/sat69b","responses":{"200":{"description":"OK"}}}},"/status/free-tier":{"get":{"operationId":"statusfreetier","security":[],"summary":"Free: /status/free-tier","responses":{"200":{"description":"OK"}}}},"/privacy":{"get":{"operationId":"privacy","security":[],"summary":"Free: /privacy","responses":{"200":{"description":"OK"}}}},"/.well-known/x402":{"get":{"operationId":"wellknownx402","security":[],"summary":"Free: /.well-known/x402","responses":{"200":{"description":"OK"}}}}}}