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",
"legal_form": "corporation",
"trademark_count": 1847,
"active_count": 1604,
"entity_id": "ent_R3jK9mN2"
},
{
"id": "own_Yk8mN2pQ",
"object": "owner",
"name": "Alphabet Inc.",
"canonical_name": "ALPHABET INC",
"country_code": "US",
"legal_form": "corporation",
"trademark_count": 1521,
"active_count": 1310,
"entity_id": null
}
],
"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",
"legal_form": "corporation",
"trademark_count": 1847,
"active_count": 1604,
"entity_id": "ent_R3jK9mN2"
},
{
"id": "own_Yk8mN2pQ",
"object": "owner",
"name": "Alphabet Inc.",
"canonical_name": "ALPHABET INC",
"country_code": "US",
"legal_form": "corporation",
"trademark_count": 1521,
"active_count": 1310,
"entity_id": null
}
],
"has_more": true,
"pagination": {
"cursor": "eyJpZCI6Im93bl9SM2pLOW1OMiIsInNvcnQiOjE4NDd9"
},
"request_id": "req_xyz789"
}
Credits: 10 per page.
Overview
Returns a paginated, summary-tier list of trademark owners. Supports fuzzy name search, country and entity-type filters, plus filters on public-company data (SEC ticker, GLEIF LEI). 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, typo-tolerant name match. Without
sort, exact names and larger portfolios rank first. Combined with ticker, lei, publicly_traded or has_lei, matches are ordered by trademark count instead.string
Filter by ISO 3166-1 alpha-2 country code (e.g.
US, GB).string
Filter by
legal_form, the kind of legal person (e.g. corporation, individual, partnership). The old entity_type parameter is a 400 that names legal_form.string
Returns owners with this value (e.g.
AAPL, case-insensitive) among their tickers: the owner’s own SEC tickers or, when it has none and is linked to an entity, the entity’s tickers (its members’ SEC tickers and its listing ticker, which can be inherited from a listed parent). The ticker Retrieve Owner shows is always one of them. Tickers on GLEIF records do not match.string
Returns owners with this GLEIF Legal Entity Identifier (case-insensitive) among their LEIs: the owner’s own LEIs or, when it has none and is linked to an entity, the entity’s LEIs (its own LEI and its members’ LEIs). The
lei Retrieve Owner shows is always one of them.boolean
true returns owners with an active SEC company with a ticker among their own company matches. false means no confirmed match of the owner’s own, not confirmed private. Strict true/false only.boolean
true returns owners with a GLEIF LEI among their own company matches. false means no confirmed LEI match of the owner’s own. Strict true/false only.ticker and lei match the tickers and LEIs Retrieve Owner returns, so an owner linked to an entity is found by its entity’s tickers and LEIs when it has no company match of its own. An owner whose entity is no longer served (GET /v1/entities/{id} returns 404) is matched on its own company matches only.publicly_traded and has_lei read the owner’s own company matches only. For an owner linked to an entity, Retrieve Owner can show publicly_traded or has_lei as true from its entity while these filters do not match it.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, adds 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
The kind of legal person (e.g.
corporation, individual), normalised from the office’s entity-type code.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 | null
The company profile this owner is linked into (
ent_*), or null when it is not linked to one. See Retrieve Entity.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",
"legal_form": "corporation",
"trademark_count": 1847,
"active_count": 1604,
"entity_id": "ent_R3jK9mN2"
},
{
"id": "own_Yk8mN2pQ",
"object": "owner",
"name": "Alphabet Inc.",
"canonical_name": "ALPHABET INC",
"country_code": "US",
"legal_form": "corporation",
"trademark_count": 1521,
"active_count": 1310,
"entity_id": null
}
],
"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);
}
Related Endpoints
- Retrieve Owner: full owner detail
- Owner Trademarks: portfolio of marks owned
- Owner Related: corporate parent and subsidiary relationships