Lookup oefa · sanctions by RUC
https://api.latinfo.dev/pe/oefa/sanctions/ruc/{ruc}
A sanctioned-entity case/resolution; one company can have multiple records. Coverage: Published environmental enforcement cases for legal-entity RUCs. Lookup by ruc as a string, preserving leading zeros. Accepted syntax and normalization are defined by the contract below. multa_expediente is in UIT, not PEN; narrative detail is truncated to 500 characters. Returns all records as an array. Import time is not observation time; inspect freshness headers. Add limit (1–500) and offset to retrieve an explicit page; without them the complete original array is returned. X-Total-Count gives the exact row count; follow Link rel=next to retrieve all pages.
Source contract
- Publisher
- OEFA, Peru
- Coverage
- Published environmental enforcement cases for legal-entity RUCs.
- Record meaning
- A sanctioned-entity case/resolution; one company can have multiple records.
- Identifier
- Lookup by ruc as a string, preserving leading zeros. Accepted syntax and normalization are defined by the contract below.
- Accepted pattern
^\d{11}$- Cardinality
many- License
- Reuse permission has not been verified. Public access is not a reuse license.
Known limitations
- multa_expediente is in UIT, not PEN; narrative detail is truncated to 500 characters.
Parameters
rucstringpathrequiredRUC in the source's normalized format. Keep identifiers as strings; preserve leading zeros.
Example: 20165230974
limitintegerqueryOptional page size. Supplying limit or offset enables explicit pagination; default page size is 100.
offsetintegerqueryRow offset, default 0. Keep the same source generation while collecting pages.
generationstringqueryOpaque source-generation guard, automatically included in the next-page Link. A changed generation returns 409; restart retrieval.
Request example
curl https://api.latinfo.dev/pe/oefa/sanctions/ruc/20165230974 \
-H "Authorization: Bearer $LATINFO_API_KEY"
Responses
200Published source records. Missing data is not a clearance or a negative finding.
Response headers
X-Latinfo-Imported-AtImport time, not the date of the government observation.
X-Source-Updated-AtPublisher update time, when known.
X-Latest-Observation-AtLatest date in returned records, when known.
X-Freshness-Statusstring
CURRENT · DELAYED · STALE · UNKNOWNX-Credits-CostActual credits charged for this request.
X-Source-GenerationOpaque immutable source generation. Follow the guarded next-page Link when collecting a history.
X-Total-CountExact row count for this identifier when pagination is requested.
X-Page-Offsetinteger
X-Page-Limitinteger
LinkNext page URL, rel=next. Absent at the end.
application/jsonResponse fields
[].ruc string requiredLookup by ruc as a string, preserving leading zeros. Accepted syntax and normalization are defined by the contract below.
[].nombre string requiredPublished entity name.
[].subsector string requiredPublished economic subsector; a dash may represent unavailable data.
[].departamento string requiredPublished department name.
[].nro_expediente string requiredEnvironmental enforcement case identifier.
[].nro_rd string requiredDirectorate resolution identifier.
[].fecha_rd string requiredPublished fecha rd date. Format: YYYYMMDD.
[].tipo_sancion string requiredPublished sanction type, such as MULTA or AMONESTACION.
[].tipo_infraccion string requiredPublished formal infraction severity; not a Latinfo score.
[].medida_dictada string requiredPublished ordered measure.
[].detalle_infraccion string requiredPublished infraction narrative; truncated to 500 characters by the importer.
[].multa_expediente string requiredTotal fine for the environmental case, in UIT. Unit: UIT.
UIT
Response schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"ruc": {
"type": "string",
"description": "Lookup by ruc as a string, preserving leading zeros. Accepted syntax and normalization are defined by the contract below."
},
"nombre": {
"type": "string",
"description": "Published entity name.",
"x-latinfo-meaning": "text"
},
"subsector": {
"type": "string",
"description": "Published economic subsector; a dash may represent unavailable data.",
"x-latinfo-meaning": "text"
},
"departamento": {
"type": "string",
"description": "Published department name.",
"x-latinfo-meaning": "text"
},
"nro_expediente": {
"type": "string",
"description": "Environmental enforcement case identifier.",
"x-latinfo-meaning": "identifier"
},
"nro_rd": {
"type": "string",
"description": "Directorate resolution identifier.",
"x-latinfo-meaning": "identifier"
},
"fecha_rd": {
"type": "string",
"description": "Published fecha rd date. Format: YYYYMMDD.",
"x-latinfo-meaning": "date"
},
"tipo_sancion": {
"type": "string",
"description": "Published sanction type, such as MULTA or AMONESTACION.",
"x-latinfo-meaning": "text"
},
"tipo_infraccion": {
"type": "string",
"description": "Published formal infraction severity; not a Latinfo score.",
"x-latinfo-meaning": "text"
},
"medida_dictada": {
"type": "string",
"description": "Published ordered measure.",
"x-latinfo-meaning": "text"
},
"detalle_infraccion": {
"type": "string",
"description": "Published infraction narrative; truncated to 500 characters by the importer.",
"x-latinfo-meaning": "text"
},
"multa_expediente": {
"type": "string",
"description": "Total fine for the environmental case, in UIT. Unit: UIT.",
"x-latinfo-meaning": "amount",
"x-latinfo-unit": "UIT"
}
},
"required": [
"ruc",
"nombre",
"subsector",
"departamento",
"nro_expediente",
"nro_rd",
"fecha_rd",
"tipo_sancion",
"tipo_infraccion",
"medida_dictada",
"detalle_infraccion",
"multa_expediente"
],
"additionalProperties": false
}
}400Invalid identifier or query. Correct the input before retrying.
401Missing or invalid API key. Authenticate before retrying.
404No published record, or identifier outside the legal-entity scope. Not proof that the company does not exist.
409Source generation changed during paginated retrieval. Restart from offset 0.
429Rate or credit limit exceeded. Inspect the response and rate-limit headers before retrying.
503Source unavailable. Report unavailable, not an empty result.
Example JSON
Illustrative schema example. This is not a live response.
[
{
"ruc": "string",
"nombre": "string",
"subsector": "string",
"departamento": "string",
"nro_expediente": "string",
"nro_rd": "string",
"fecha_rd": "string",
"tipo_sancion": "string",
"tipo_infraccion": "string",
"medida_dictada": "string",
"detalle_infraccion": "string",
"multa_expediente": "string"
}
]Provenance and limitations
Coverage varies by country and public source. A missing field is not evidence that the underlying fact does not exist. Public registries may be delayed or contain source errors; inspect the returned evidence and source date before relying on a result.