curl --request GET \
--url https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customerimport requests
url = "https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer', 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.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "7f3b1c52-9e4a-4d1b-8a67-2c5d9f0e4b13",
"documentType": "CPF",
"customerUrl": "https://portal.example.com/c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"address": {
"street": "Rua das Flores",
"number": "123",
"complement": "Apto 45",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "SP",
"postalCode": "01000-000"
},
"name": "Ana Souza",
"document": "52998224725",
"trandingName": "Souza Studio",
"email": "ana.souza@example.com",
"phoneNumber": "+5511999999999",
"createdAt": "2026-03-14T12:30:00.000Z",
"createdBy": "9b2f4c1e-5d38-4a76-b0e1-3c8a7d2f6e45",
"hash": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"status": "ACTIVE",
"customFields": {
"cost-center": "CC-1020"
}
}
],
"next": "NjcxMWI0YzBkOGUxYTMwMDEyYjdjOWYy"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "FORBIDDEN_CUSTOMER",
"origin": "REGISTRY",
"message": "You do not have permission to perform this action on this resource (customer)"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "BAD_REQUEST",
"origin": "REGISTRY",
"message": "Bad Request: Your request is invalid or incomplete. Please make sure you are requesting with the right fields.",
"fields": [
{
"field": "documents",
"message": "Too big: expected array to have <=100 items",
"code": "DOCUMENTS_MAX"
}
]
}List customers
Lists the customers of an organization, 25 per page and oldest first by default.
curl --request GET \
--url https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customerimport requests
url = "https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer', 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.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/customer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "7f3b1c52-9e4a-4d1b-8a67-2c5d9f0e4b13",
"documentType": "CPF",
"customerUrl": "https://portal.example.com/c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"address": {
"street": "Rua das Flores",
"number": "123",
"complement": "Apto 45",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "SP",
"postalCode": "01000-000"
},
"name": "Ana Souza",
"document": "52998224725",
"trandingName": "Souza Studio",
"email": "ana.souza@example.com",
"phoneNumber": "+5511999999999",
"createdAt": "2026-03-14T12:30:00.000Z",
"createdBy": "9b2f4c1e-5d38-4a76-b0e1-3c8a7d2f6e45",
"hash": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"status": "ACTIVE",
"customFields": {
"cost-center": "CC-1020"
}
}
],
"next": "NjcxMWI0YzBkOGUxYTMwMDEyYjdjOWYy"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "FORBIDDEN_CUSTOMER",
"origin": "REGISTRY",
"message": "You do not have permission to perform this action on this resource (customer)"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "BAD_REQUEST",
"origin": "REGISTRY",
"message": "Bad Request: Your request is invalid or incomplete. Please make sure you are requesting with the right fields.",
"fields": [
{
"field": "documents",
"message": "Too big: expected array to have <=100 items",
"code": "DOCUMENTS_MAX"
}
]
}limit and next: pass the next cursor of one page to get the following one; the last page has no next. Sort with order and orderBy.
search looks for the text, case-insensitively, anywhere in the customer’s name, trade name or document, and in the text values of its custom fields (a number or yes/no value is never matched). A term with at least one letter is searched as typed. A term with no letter keeps only its digits, so a CPF typed as 529.982.247-25 finds the stored 52998224725, and 10-20 is searched as 1020.
documents looks up up to 100 documents at once, comma-separated: ?documents=52998224725,11144477735 (repeating the parameter works too). A repeated document counts once, more than 100 is rejected and a blank value is ignored. It combines with search, status and documentType, but it answers every match in one response, oldest first and with no next: limit, next, order and orderBy don’t apply.Path Parameters
ID of your realm.
Format: UUID
ID of the organization whose customers you want to list.
Format: UUID
Query Parameters
Free-text search over the customer's name, trade name, document and the text values of its custom fields (case-insensitive, any part of the text).
Only customers in one of these statuses.
Example (comma-separated list): ?status=ACTIVE,DEACTIVATED
ACTIVE, DEACTIVATED Only customers whose document is of one of these kinds: CPF (people) or CNPJ (companies).
Example (comma-separated list): ?documentType=CPF,CNPJ
CPF, CNPJ Only the customers with these documents (exact match, CPF or CNPJ without formatting).
Example (comma-separated list): ?documents=52998224725,11144477735
1 - 100 elements1Sort direction: ASC (oldest first, by default) or DESC.
ASC, DESC Name of the customer field to sort by. Defaults to createdAt.
Page size. Defaults to 25.
Cursor returned as next by the previous page. Omit it to get the first page.