Catalog / Tenders & public contracts
TENDERS & PUBLIC CONTRACTS · PERU
Peru SEACE Contracts
Search Peru public procurement contracts by buyer, supplier, keyword and signing date.
About this data
Search Peru public procurement contracts by buyer, supplier, keyword and signing date. Export awarded contract amounts, currencies and source links. No API key needed.
From the actor’s Apify Store listing. The per-call endpoint may return a bounded subset; its own description is below.
Buy per call over x402
One endpoint at api.ssh.autos. Each call is one JSON POST, paid in USDC with no account or API key, and answered in the same HTTP response.
POST /v1/pe/seace/contracts
Search awarded Peruvian state contracts in the official SEACE registry by keyword, buyer, supplier, contract number or signing-date window: buyer, supplier and RUC, amount, currency and dates, up to 100 awards per call. Source: SEACE / OECE official registry.
Give at least one filter or a date window.
Input
Send a JSON body to POST https://api.ssh.autos/v1/pe/seace/contracts.
| Field | Type | Required | Notes |
|---|---|---|---|
keyword | string | optional | Free text matched against the contract. at least 3 characters |
buyer | string | optional | Contracting entity name fragment. at least 3 characters |
supplier | string | optional | Supplier (proveedor) name fragment. at least 3 characters |
contractNumber | string | optional | Contract number fragment. at least 3 characters |
dateFrom | string | optional | Signing-date window start, YYYY-MM-DD (with dateTo). |
dateTo | string | optional | Signing-date window end, YYYY-MM-DD (with dateFrom). |
year | integer | optional | SEACE registry year (default: current year). at least 2015 |
maxResults | integer | optional | 1–100; default 50 |
Returned fields
The answer is JSON: records, a list of up to 100, and summary, the run status and counts. Each record has these 27 fields; a field the source does not publish comes back null.
27 fields per record
| Field | Type | Notes |
|---|---|---|
contractKey | string | Composite unique key: source:contrato:idContrato (e.g. prod4.seace.gob.pe:contrato:2391845). |
idContrato | string | SEACE contract id. |
idExpediente | string | Contracting file (expediente) id — the public detail page is keyed on it. |
numeroContrato | string | Contract number as printed, e.g. '017-2026-UE011-BID'. |
nomenclaturaProceso | string | Selection-process nomenclature (the notice reference), e.g. 'LP-ABR-4-2025-MDS/CS-1'. |
buyerRuc | string | Buyer entity's RUC (11 digits), when present. |
buyerName | string | Buyer entity name (entidad contratante). |
supplierRuc | string | Supplier's RUC (11 digits) or L-prefixed foreign code, when present. |
supplierName | string | Supplier name (contratista). |
amount | number | Contract amount in the contract's currency. |
currency | string | ISO currency of amount: PEN (S/.), USD ($), GBP (£); null when the registry shows an unmapped symbol. |
currencyRaw | string | Currency symbol exactly as SEACE shows it. |
amountBudget | number | Budgeted amount (monto presupuesto), when published. |
amountCcp | number | CCP-noted amount, when published. |
signedAt | string | Contract signing date, ISO YYYY-MM-DD. |
startDate | string | Contract start date, ISO YYYY-MM-DD. |
endDate | string | Contract end date, ISO YYYY-MM-DD. |
objectCode | string | SEACE object code: 62=Bien, 63=Consultoría, 64=Obra, 65=Servicio. |
objectType | string | Object type name: BIEN, CONSULTORIA, OBRA, SERVICIO. |
state | string | Publication state, e.g. 'Publicado'. |
year | string | Contract year as registered by SEACE. |
isMinorContract | boolean | True for contratos menores (small-purchase lane). |
isConsortium | boolean | True when the supplier is a consortium. |
url | string | Public SEACE detail page for the expediente. |
sourceQuery | string | The scope this run searched (filters + year). |
source | string | Source API hostname. |
scrapedAt | string | UTC ISO-8601 collection timestamp. |
Example call
npx agentcash@latest fetch https://api.ssh.autos/v1/pe/seace/contracts -m POST -b '{"supplier": "GLORIA", "maxResults": 5}'
The example values come from the API spec or the actor’s own sample input. Running it is a paid call.
What is and isn’t charged
You pay the call price for
- An answer, including a definitive “not found” or an empty result.
- No matches returns records: [] (charged).
Free
- Invalid input (422), busy (503), source failure (502), timeout (504) and calls whose client hung up are never charged.
- Invalid filters and registry outages are not charged.
Prefer a subscription? Run it on Apify
This data source is a public actor on the Apify Store: Peru SEACE Contracts Scraper. Run it with your Apify account and plan for larger, scheduled or exported runs; it may offer more input options than the per-call endpoint.
How x402 payment works
- Your client sends the request. The API answers
402 Payment Requiredwith the price and where to pay. - The client pays from its own wallet: USDC on Base or Solana over x402, or over MPP on Tempo. No account, sign-up or API key.
- The client retries with the payment attached and gets the JSON answer in the same call. You are only charged for answers.
The AgentCash CLI in the example does all three steps for you and pays from your AgentCash wallet. Any x402 or MPP client works the same way.
Machine-readable: openapi.json · llms.txt