curl --request GET \
--url https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/productsimport requests
url = "https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/products"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/products', 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}/products",
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}/products"
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}/products")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/products")
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": "9b2f6c1e-3d4a-4f7b-8e21-5a6c7d8e9f01",
"realmId": "f495ff0c-ab54-4f99-8e92-ca8682e4de9b",
"organizationId": "c4bd3f21-dfbd-44e8-8055-68ba15bed410",
"name": "Consultoria em logística",
"description": "Hora técnica de consultoria em logística e roteirização.",
"value": 15000,
"type": "SERVICE",
"status": "ACTIVE",
"skuCode": "CONS-LOG-001",
"createdAt": "2026-10-02T14:03:11.000Z",
"updatedAt": "2026-10-05T09:30:00.000Z"
}
],
"next": "NjcxMWI0YzBkOGUxYTMwMDEyYjdjOWYy"
}{
"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": "name",
"message": "Too big: expected string to have <=56 characters",
"code": "NAME_MAX"
}
]
}List products
Lists the organization’s products and services, newest first.
curl --request GET \
--url https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/productsimport requests
url = "https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/products"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/products', 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}/products",
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}/products"
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}/products")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.registry.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/products")
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": "9b2f6c1e-3d4a-4f7b-8e21-5a6c7d8e9f01",
"realmId": "f495ff0c-ab54-4f99-8e92-ca8682e4de9b",
"organizationId": "c4bd3f21-dfbd-44e8-8055-68ba15bed410",
"name": "Consultoria em logística",
"description": "Hora técnica de consultoria em logística e roteirização.",
"value": 15000,
"type": "SERVICE",
"status": "ACTIVE",
"skuCode": "CONS-LOG-001",
"createdAt": "2026-10-02T14:03:11.000Z",
"updatedAt": "2026-10-05T09:30:00.000Z"
}
],
"next": "NjcxMWI0YzBkOGUxYTMwMDEyYjdjOWYy"
}{
"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": "name",
"message": "Too big: expected string to have <=56 characters",
"code": "NAME_MAX"
}
]
}name, skuCode, status, type and a creation date range (startDate, endDate), sort it with orderBy and order, and page through it with limit and next: each page answers the cursor of the following one as next, which is null on the last page.
name matches the products whose name or SKU code contains the text, ignoring case, while skuCode and type match by contained text too. The date range is on the creation date and both ends are inclusive; a date with no time means 00:00 UTC of that day.Path Parameters
ID of your realm.
Format: UUID
ID of the organization whose products you want to list.
Format: UUID
Query Parameters
Only products whose name or SKU code contains this text (case-insensitive).
1 - 56Only products whose SKU code contains this text (case-insensitive).
1 - 50Only products in this status.
ACTIVE, DEACTIVATED Only products whose type contains this text (case-insensitive): PRODUCT or SERVICE.
1 - 50Only products created at or after this moment, in ISO 8601. A date with no time means 00:00 UTC of that day. It can't be after endDate.
Only products created at or before this moment, in ISO 8601. A date with no time means 00:00 UTC of that day, so 2026-10-31 leaves out products created later on the 31st: send 2026-10-31T23:59:59.999Z to include the whole day.
Page size. Defaults to 15.
Cursor returned as next by the previous page. Omit it for the first page.
Sort direction. Defaults to DESC: newest first when sorting by createdAt.
ASC, DESC Field to sort by. Defaults to createdAt.
name, value, createdAt