---
title: "SBS SOAT, CAT and Vehicle Insurance Report"
method: POST
path: "/pe/sbs/soat/v1"
tags: ["Peru", "SBS"]
---

# SBS SOAT, CAT and Vehicle Insurance Report

`POST /pe/sbs/soat/v1`

## Request

- Base URL: `https://api.croma.run`
- URL: `https://api.croma.run/pe/sbs/soat/v1`
- Auth: HTTP bearer

Look up a Peruvian vehicle plate's SOAT, CAT and vehicle insurance reports from SBS (Superintendencia de Banca, Seguros y AFP), Peru's banking and insurance regulator, in one call. The top level is SOAT (mandatory traffic-accident insurance): `accident_count` (accidents covered in the last 5 years), `policies` (issuing company, vehicle class/use, accidents per policy, policy/certificate number, coverage window, status VIGENTE/VENCIDA/ANULADA, annulment date and reason, rectification date), `has_active_soat` with the current policy as `active`, and `coverages`. `vehicle_insurance` is the private Seguro Vehicular report with the same policy shape and `has_active_policy`. `cat` is the CAT report (certificates AFOCATs issue to public transport vehicles), with `certificates`, `has_active_cat` and `coverages`. `found: false` at any level means that report has nothing on record for the plate.

Supports async delivery: set `Prefer: wait=N` for an inline result, pass `callback_url` to receive a POST when ready, or poll `GET /jobs/{id}`.

## Headers

- `Idempotency-Key` string
- `Prefer` string

## Request body

- object
  - `plate` string, required: The vehicle plate to look up (4-10 characters).
  - `callback_url` string, uri: POST the job result here when it finishes.

## Response `200`

Successful response

- SbsSoatResponse
  - `data` SbsSoatData, required
    - `found` boolean, required: Whether the source returned SOAT information for the plate.
    - `plate` string, required: Echoes the searched plate (trimmed, uppercased).
    - `report_date` string, nullable, required: Query timestamp the source stamps (ISO, when parseable).
    - `data_through` string, nullable, required: "Información actualizada a" label (e.g. "AGOSTO 2026"), passthrough.
    - `accident_count` number, required: Siniestralidad: accidents covered by SOAT in the last 5 years.
    - `has_active_soat` boolean, required: True when a policy is currently in force (VIGENTE).
    - `active` object, nullable, required: The current (VIGENTE) policy when present, else null.
      - `company` string, required: Issuing insurance company (e.g. "Interseguro", "Rímac Seguros").
      - `vehicle_class` string, required: Vehicle class (e.g. "Automóvil", "Camioneta Pick up", "Vehículo menor urbano").
      - `vehicle_use` string, required: Vehicle use (e.g. "Particular", "Transporte Urbano").
      - `accident_count` number, required: Accidents covered by this policy or certificate.
      - `policy_number` string, required
      - `certificate_number` string, required
      - `start_date` string, nullable, required: Coverage start date (yyyy-mm-dd when parseable).
      - `end_date` string, nullable, required: Coverage end date (yyyy-mm-dd when parseable).
      - `status` 'VIGENTE' | 'VENCIDA' | 'ANULADA', required: Derived from the coverage window and the source's own comment.
      - `annulled_date` string, nullable, required: Annulment date when the comment reports one.
      - `annulment_reason` string, nullable, required: Why it was annulled when the comment says (e.g. "falta de pago"), else null.
      - `rectified_date` string, nullable, required: Date the insurer last rectified the record, when the comment reports one.
      - `comment` string, nullable, required: The source's comment, e.g. an annulment or rectification note.
    - `count` number, required: Number of policies on record.
    - `policies` object[], required: Policy history, newest first as the source returns it.
      - `company` string, required: Issuing insurance company (e.g. "Interseguro", "Rímac Seguros").
      - `vehicle_class` string, required: Vehicle class (e.g. "Automóvil", "Camioneta Pick up", "Vehículo menor urbano").
      - `vehicle_use` string, required: Vehicle use (e.g. "Particular", "Transporte Urbano").
      - `accident_count` number, required: Accidents covered by this policy or certificate.
      - `policy_number` string, required
      - `certificate_number` string, required
      - `start_date` string, nullable, required: Coverage start date (yyyy-mm-dd when parseable).
      - `end_date` string, nullable, required: Coverage end date (yyyy-mm-dd when parseable).
      - `status` 'VIGENTE' | 'VENCIDA' | 'ANULADA', required: Derived from the coverage window and the source's own comment.
      - `annulled_date` string, nullable, required: Annulment date when the comment reports one.
      - `annulment_reason` string, nullable, required: Why it was annulled when the comment says (e.g. "falta de pago"), else null.
      - `rectified_date` string, nullable, required: Date the insurer last rectified the record, when the comment reports one.
      - `comment` string, nullable, required: The source's comment, e.g. an annulment or rectification note.
    - `coverages` object[], required: What a SOAT policy covers, and up to how much.
      - `coverage` string, required: Covered event (e.g. "Fallecimiento", "Gastos médicos").
      - `amount` string, required: Coverage amount as the source states it (e.g. "Hasta 5 UIT").
    - `vehicle_insurance` object, required: The plate's private vehicle insurance (Seguro Vehicular) report.
      - `found` boolean, required
      - `report_date` string, nullable, required: Query timestamp the source stamps (ISO, when parseable).
      - `data_through` string, nullable, required: "Información actualizada a" label (e.g. "AGOSTO 2026"), passthrough.
      - `accident_count` number, required: Accidents covered in the last 5 years.
      - `count` number, required
      - `has_active_policy` boolean, required: True when a vehicle insurance policy is currently in force.
      - `active` object, nullable, required: The current (VIGENTE) policy when present, else null.
        - `company` string, required: Issuing insurance company (e.g. "Interseguro", "Rímac Seguros").
        - `vehicle_class` string, required: Vehicle class (e.g. "Automóvil", "Camioneta Pick up", "Vehículo menor urbano").
        - `vehicle_use` string, required: Vehicle use (e.g. "Particular", "Transporte Urbano").
        - `accident_count` number, required: Accidents covered by this policy or certificate.
        - `policy_number` string, required
        - `certificate_number` string, required
        - `start_date` string, nullable, required: Coverage start date (yyyy-mm-dd when parseable).
        - `end_date` string, nullable, required: Coverage end date (yyyy-mm-dd when parseable).
        - `status` 'VIGENTE' | 'VENCIDA' | 'ANULADA', required: Derived from the coverage window and the source's own comment.
        - `annulled_date` string, nullable, required: Annulment date when the comment reports one.
        - `annulment_reason` string, nullable, required: Why it was annulled when the comment says (e.g. "falta de pago"), else null.
        - `rectified_date` string, nullable, required: Date the insurer last rectified the record, when the comment reports one.
        - `comment` string, nullable, required: The source's comment, e.g. an annulment or rectification note.
      - `policies` object[], required: Vehicle insurance policies, newest first as the source returns them.
        - `company` string, required: Issuing insurance company (e.g. "Interseguro", "Rímac Seguros").
        - `vehicle_class` string, required: Vehicle class (e.g. "Automóvil", "Camioneta Pick up", "Vehículo menor urbano").
        - `vehicle_use` string, required: Vehicle use (e.g. "Particular", "Transporte Urbano").
        - `accident_count` number, required: Accidents covered by this policy or certificate.
        - `policy_number` string, required
        - `certificate_number` string, required
        - `start_date` string, nullable, required: Coverage start date (yyyy-mm-dd when parseable).
        - `end_date` string, nullable, required: Coverage end date (yyyy-mm-dd when parseable).
        - `status` 'VIGENTE' | 'VENCIDA' | 'ANULADA', required: Derived from the coverage window and the source's own comment.
        - `annulled_date` string, nullable, required: Annulment date when the comment reports one.
        - `annulment_reason` string, nullable, required: Why it was annulled when the comment says (e.g. "falta de pago"), else null.
        - `rectified_date` string, nullable, required: Date the insurer last rectified the record, when the comment reports one.
        - `comment` string, nullable, required: The source's comment, e.g. an annulment or rectification note.
    - `cat` object, required: The plate's CAT report: certificates issued by AFOCATs, the regional funds that cover public transport vehicles in place of SOAT.
      - `found` boolean, required
      - `report_date` string, nullable, required: Query timestamp the source stamps (ISO, when parseable).
      - `data_through` string, nullable, required: "Información actualizada a" label (e.g. "AGOSTO 2026"), passthrough.
      - `accident_count` number, required: Accidents covered in the last 5 years.
      - `count` number, required
      - `has_active_cat` boolean, required: True when a CAT certificate is currently in force.
      - `active` object, nullable, required: The current (VIGENTE) certificate when present, else null.
        - `company` string, required: Issuing AFOCAT (the regional fund that issues CAT certificates).
        - `vehicle_class` string, required: Vehicle class (e.g. "Automóvil", "Camioneta Pick up", "Vehículo menor urbano").
        - `vehicle_use` string, required: Vehicle use (e.g. "Particular", "Transporte Urbano").
        - `accident_count` number, required: Accidents covered by this policy or certificate.
        - `certificate_number` string, required
        - `start_date` string, nullable, required: Coverage start date (yyyy-mm-dd when parseable).
        - `end_date` string, nullable, required: Coverage end date (yyyy-mm-dd when parseable).
        - `status` 'VIGENTE' | 'VENCIDA' | 'ANULADA', required: Derived from the coverage window and the source's own comment.
        - `annulled_date` string, nullable, required: Annulment date when the comment reports one.
        - `annulment_reason` string, nullable, required: Why it was annulled when the comment says (e.g. "falta de pago"), else null.
        - `rectified_date` string, nullable, required: Date the insurer last rectified the record, when the comment reports one.
        - `comment` string, nullable, required: The source's comment, e.g. an annulment or rectification note.
      - `certificates` object[], required: CAT certificates, newest first as the source returns them.
        - `company` string, required: Issuing AFOCAT (the regional fund that issues CAT certificates).
        - `vehicle_class` string, required: Vehicle class (e.g. "Automóvil", "Camioneta Pick up", "Vehículo menor urbano").
        - `vehicle_use` string, required: Vehicle use (e.g. "Particular", "Transporte Urbano").
        - `accident_count` number, required: Accidents covered by this policy or certificate.
        - `certificate_number` string, required
        - `start_date` string, nullable, required: Coverage start date (yyyy-mm-dd when parseable).
        - `end_date` string, nullable, required: Coverage end date (yyyy-mm-dd when parseable).
        - `status` 'VIGENTE' | 'VENCIDA' | 'ANULADA', required: Derived from the coverage window and the source's own comment.
        - `annulled_date` string, nullable, required: Annulment date when the comment reports one.
        - `annulment_reason` string, nullable, required: Why it was annulled when the comment says (e.g. "falta de pago"), else null.
        - `rectified_date` string, nullable, required: Date the insurer last rectified the record, when the comment reports one.
        - `comment` string, nullable, required: The source's comment, e.g. an annulment or rectification note.
      - `coverages` object[], required: What a CAT certificate covers, and up to how much.
        - `coverage` string, required: Covered event (e.g. "Fallecimiento", "Gastos médicos").
        - `amount` string, required: Coverage amount as the source states it (e.g. "Hasta 5 UIT").

## Other responses

- `202`: Accepted — the result is being computed asynchronously. Poll `job.status_url` (GET /jobs/{id}) or supply `callback_url` to have the result POSTed to you. Returned when `Prefer: wait` elapses before completion, or immediately when `callback_url` is set.
- `400`: Invalid request body
- `401`: Missing or invalid API key
- `429`: Rate limit exceeded
- `500`: Internal error
- `502`: Upstream source returned an error

---

[API](https://skmtc.dev/usecroma/apis/croma-marketplace-api.md) · [All operations](https://skmtc.dev/usecroma/apis/croma-marketplace-api/llms.txt) · [OpenAPI document](https://skmtc.dev/usecroma/apis/croma-marketplace-api/revisions/df016cdb29d7?raw)
