curl --request POST \
--url https://api.croma.run/pe/sunarp/registry-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"office": "LIMA",
"registry_area": "vehicles",
"search_by": "plate",
"number": "ABC123"
}
'import requests
url = "https://api.croma.run/pe/sunarp/registry-search/v1"
payload = {
"office": "LIMA",
"registry_area": "vehicles",
"search_by": "plate",
"number": "ABC123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
office: 'LIMA',
registry_area: 'vehicles',
search_by: 'plate',
number: 'ABC123'
})
};
fetch('https://api.croma.run/pe/sunarp/registry-search/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.croma.run/pe/sunarp/registry-search/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'office' => 'LIMA',
'registry_area' => 'vehicles',
'search_by' => 'plate',
'number' => 'ABC123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.croma.run/pe/sunarp/registry-search/v1"
payload := strings.NewReader("{\n \"office\": \"LIMA\",\n \"registry_area\": \"vehicles\",\n \"search_by\": \"plate\",\n \"number\": \"ABC123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.croma.run/pe/sunarp/registry-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"office\": \"LIMA\",\n \"registry_area\": \"vehicles\",\n \"search_by\": \"plate\",\n \"number\": \"ABC123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/pe/sunarp/registry-search/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"office\": \"LIMA\",\n \"registry_area\": \"vehicles\",\n \"search_by\": \"plate\",\n \"number\": \"ABC123\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"found": true,
"office": "<string>",
"registry_area": "<string>",
"search_by": "<string>",
"number": "<string>",
"count": 123,
"theft_alert": "<string>",
"entries": [
{
"registry_zone": "<string>",
"office": "<string>",
"partida_number": "<string>",
"status": "open",
"moved_to_partida": "<string>",
"plate": "<string>",
"vehicle_status": "<string>",
"ficha_number": "<string>",
"volume": "<string>",
"folio": "<string>",
"book": "<string>",
"registry": "<string>"
}
]
}
}{
"job": {
"id": "<string>",
"status": "queued",
"endpoint": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"status_url": "<string>"
},
"data": {},
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}SUNARP Registry Search
Search one SUNARP registry office (e.g. LIMA) and registry (vehicles, real_estate, legal_entities, …) by partida, plate or ficha number. Returns the matching partidas with their zone, office and status; for vehicles also the plate and vehicle status. Pass a partida_number to sunarp-registry-entry for its inscriptions and pages. found: false when nothing matches.
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}.
curl --request POST \
--url https://api.croma.run/pe/sunarp/registry-search/v1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"office": "LIMA",
"registry_area": "vehicles",
"search_by": "plate",
"number": "ABC123"
}
'import requests
url = "https://api.croma.run/pe/sunarp/registry-search/v1"
payload = {
"office": "LIMA",
"registry_area": "vehicles",
"search_by": "plate",
"number": "ABC123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
office: 'LIMA',
registry_area: 'vehicles',
search_by: 'plate',
number: 'ABC123'
})
};
fetch('https://api.croma.run/pe/sunarp/registry-search/v1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.croma.run/pe/sunarp/registry-search/v1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'office' => 'LIMA',
'registry_area' => 'vehicles',
'search_by' => 'plate',
'number' => 'ABC123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.croma.run/pe/sunarp/registry-search/v1"
payload := strings.NewReader("{\n \"office\": \"LIMA\",\n \"registry_area\": \"vehicles\",\n \"search_by\": \"plate\",\n \"number\": \"ABC123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.croma.run/pe/sunarp/registry-search/v1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"office\": \"LIMA\",\n \"registry_area\": \"vehicles\",\n \"search_by\": \"plate\",\n \"number\": \"ABC123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.croma.run/pe/sunarp/registry-search/v1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"office\": \"LIMA\",\n \"registry_area\": \"vehicles\",\n \"search_by\": \"plate\",\n \"number\": \"ABC123\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"found": true,
"office": "<string>",
"registry_area": "<string>",
"search_by": "<string>",
"number": "<string>",
"count": 123,
"theft_alert": "<string>",
"entries": [
{
"registry_zone": "<string>",
"office": "<string>",
"partida_number": "<string>",
"status": "open",
"moved_to_partida": "<string>",
"plate": "<string>",
"vehicle_status": "<string>",
"ficha_number": "<string>",
"volume": "<string>",
"folio": "<string>",
"book": "<string>",
"registry": "<string>"
}
]
}
}{
"job": {
"id": "<string>",
"status": "queued",
"endpoint": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"status_url": "<string>"
},
"data": {},
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"details": {}
}
}Authorizations
Use Authorization: Bearer YOUR_API_KEY
Headers
Optional client-chosen key for this request (any string up to 255 characters, e.g. a UUID). Every Croma operation is an idempotent lookup: repeating a request with the same body returns the same result and creates nothing, so retrying after a timeout or network failure is always safe. The key is echoed back in the Idempotency-Key response header so you can correlate a retry with its first attempt. Each attempt that reaches the API counts against the rate limit.
255"0f8e9a42-6b7c-4d1e-9a3f-2c5d7e8f9a0b"
Set wait=N to hold the connection up to N seconds for an inline result. If the job finishes in time you get the normal 200 body; otherwise a 202 with a status_url to poll.
"wait=30"
Body
The registry office (oficina registral) by name, e.g. LIMA, AREQUIPA, CUSCO. Case and accents are ignored.
2 - 60The registry: real_estate (propiedad inmueble predial), non_land_property (propiedad inmueble no predial), legal_entities (personas jurídicas), natural_persons (personas naturales), vehicles (propiedad vehicular), mining (propiedad minera), vessels (naves y embarcaciones), aircraft (aeronaves) or movable_contracts (registro mobiliario de contratos).
real_estate, non_land_property, legal_entities, natural_persons, vehicles, mining, vessels, aircraft, movable_contracts The partida, plate or ficha number, e.g. 53237569 or AKI774. Spaces and hyphens are ignored.
3 - 12^[A-Za-z0-9][A-Za-z0-9 -]{1,10}[A-Za-z0-9]$What number is: partida (the registry entry number, the default), plate (vehicles only) or ficha (the older card number, every registry except vehicles). A partida starting with P is written as P12345678.
partida, plate, ficha Optional. Run as this connection (conn_…). Empty lets Croma pick among your organization's connections, moving to the next one when one reaches its daily allowance.
POST the job result here when it finishes.
Response
Successful response
Show child attributes
Show child attributes