Search Owners
curl --request GET \
--url https://api.signa.so/v1/owners \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/owners"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/owners', 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.signa.so/v1/owners",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.signa.so/v1/owners"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.signa.so/v1/owners")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/owners")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "own_R3jK9mN2",
"object": "owner",
"name": "Apple Inc.",
"canonical_name": "APPLE INC",
"country_code": "US",
"entity_type": "corporation",
"trademark_count": 1847,
"active_count": 1604,
"entity_id": "ent_R3jK9mN2",
"entity_id_type": "resolved"
},
{
"id": "own_Yk8mN2pQ",
"object": "owner",
"name": "Alphabet Inc.",
"canonical_name": "ALPHABET INC",
"country_code": "US",
"entity_type": "corporation",
"trademark_count": 1521,
"active_count": 1310,
"entity_id": "ent_Yk8mN2pQ",
"entity_id_type": "derived"
}
],
"has_more": true,
"pagination": {
"cursor": "eyJpZCI6Im93bl9SM2pLOW1OMiIsInNvcnQiOjE4NDd9"
},
"request_id": "req_xyz789"
}
Owners
Search Owners
Search trademark owners with filtering, public-company joins, and cursor pagination
GET
/
v1
/
owners
Search Owners
curl --request GET \
--url https://api.signa.so/v1/owners \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/owners"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/owners', 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.signa.so/v1/owners",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.signa.so/v1/owners"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.signa.so/v1/owners")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/owners")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "own_R3jK9mN2",
"object": "owner",
"name": "Apple Inc.",
"canonical_name": "APPLE INC",
"country_code": "US",
"entity_type": "corporation",
"trademark_count": 1847,
"active_count": 1604,
"entity_id": "ent_R3jK9mN2",
"entity_id_type": "resolved"
},
{
"id": "own_Yk8mN2pQ",
"object": "owner",
"name": "Alphabet Inc.",
"canonical_name": "ALPHABET INC",
"country_code": "US",
"entity_type": "corporation",
"trademark_count": 1521,
"active_count": 1310,
"entity_id": "ent_Yk8mN2pQ",
"entity_id_type": "derived"
}
],
"has_more": true,
"pagination": {
"cursor": "eyJpZCI6Im93bl9SM2pLOW1OMiIsInNvcnQiOjE4NDd9"
},
"request_id": "req_xyz789"
}
Overview
Returns a paginated, summary-tier list of trademark owners. Supports fuzzy name search, country and entity-type filters, plus virtual filters that join public-company enrichment to find owners with SEC ticker or GLEIF LEI matches. Suppressed owners (placeholder records, frozen entities) are always excluded.Owners or entities, which one do I use? Owners are the raw office-level record parties: the same company appears once per office and per name variant, exactly as each office filed it. Use owners for provenance or exact-record display. For company-level questions (“everything this company owns, everywhere”), start with Entities, the resolved real-world organizations that link these owner records together.
Query Parameters
string
Fuzzy name search via trigram similarity. Tolerant of typos and word reordering.
string
Filter by ISO 3166-1 alpha-2 country code (e.g.
US, GB).string
Filter by entity type (e.g.
corporation, individual, partnership).string
Virtual filter: matches owners linked to a public company with the given stock ticker (e.g.
AAPL).string
Virtual filter: matches owners linked to a GLEIF Legal Entity Identifier.
boolean
Virtual filter:
true returns owners matched to an active SEC company with a ticker. false means no confirmed active ticker match, not confirmed private. Strict true/false only.boolean
Virtual filter:
true returns owners matched to a GLEIF legal entity. false means no confirmed LEI match. Strict true/false only.string
Sort field with optional
- prefix for descending. One of -trademark_count, trademark_count, -grant_rate, grant_rate, -latest_filing, latest_filing, -name, name. Default: -trademark_count.boolean
default:"false"
When
true, includes an accurate total count in pagination.total_count.integer
default:"20"
Page size, between 1 and 100.
string
Opaque cursor returned in the previous response’s
pagination.cursor.Response
string
Always
list.object[]
Show Owner summary object
Show Owner summary object
string
Owner ID prefixed with
own_.string
Always
owner.string
Display name of the owner.
string
Normalized name used for entity resolution and deduplication.
string | null
ISO 3166-1 alpha-2 country code.
string | null
Entity type (e.g.
corporation, individual).integer
Total trademarks owned. Counts marks: a Madrid IR family counts once, matching the default grouped
GET /v1/trademarks listings.integer
Count of active trademarks (registered + pending). Always present; 0 when stats not yet computed.
string
The id of the company profile this owner belongs to (
ent_*), or a derived placeholder id when it isn’t linked to one yet. See Retrieve Entity.string
resolved or derived. On the list, this can briefly show derived for an owner that’s already linked elsewhere, until the list catches up; Retrieve Owner detail always reflects the current link.boolean
Whether more owners are available.
object
Cursor for the next page.
string
Unique request identifier for support and debugging.
{
"object": "list",
"data": [
{
"id": "own_R3jK9mN2",
"object": "owner",
"name": "Apple Inc.",
"canonical_name": "APPLE INC",
"country_code": "US",
"entity_type": "corporation",
"trademark_count": 1847,
"active_count": 1604,
"entity_id": "ent_R3jK9mN2",
"entity_id_type": "resolved"
},
{
"id": "own_Yk8mN2pQ",
"object": "owner",
"name": "Alphabet Inc.",
"canonical_name": "ALPHABET INC",
"country_code": "US",
"entity_type": "corporation",
"trademark_count": 1521,
"active_count": 1310,
"entity_id": "ent_Yk8mN2pQ",
"entity_id_type": "derived"
}
],
"has_more": true,
"pagination": {
"cursor": "eyJpZCI6Im93bl9SM2pLOW1OMiIsInNvcnQiOjE4NDd9"
},
"request_id": "req_xyz789"
}
Code Examples
curl -G "https://api.signa.so/v1/owners" \
-H "Authorization: Bearer sig_YOUR_KEY" \
--data-urlencode "country_code=US" \
--data-urlencode "publicly_traded=true" \
--data-urlencode "sort=-trademark_count" \
--data-urlencode "limit=20"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const owners = await signa.owners.list({
country_code: "US",
publicly_traded: true,
sort: "-trademark_count",
limit: 20,
});
for await (const owner of owners) {
console.log(owner.name, owner.trademark_count);
}
Errors
| Status | Type | Description |
|---|---|---|
| 400 | validation_error | Invalid sort, unknown filter value, or non-strict boolean for publicly_traded or has_lei |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | API key lacks the trademarks:read scope |
| 429 | rate_limited | Rate limit exceeded |
| 503 | service_unavailable | Owner search is temporarily unavailable; retry after Retry-After |
Related Endpoints
- Retrieve Owner: full owner detail
- Owner Trademarks: portfolio of marks owned
- Owner Related: corporate parent and subsidiary relationships