Retrieve Owner
curl --request GET \
--url https://api.signa.so/v1/owners/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/owners/{id}"
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/{id}', 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/{id}",
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/{id}"
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/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/owners/{id}")
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{
"id": "own_R3jK9mN2",
"object": "owner",
"name": "Apple Inc.",
"canonical_name": "APPLE INC",
"name_original_script": null,
"country_code": "US",
"legal_form": "corporation",
"address": {
"lines": ["One Apple Park Way"],
"city": "Cupertino",
"region": "CA",
"postal_code": "95014",
"country_code": "US",
"formatted": null
},
"entity_id": "ent_R3jK9mN2",
"publicly_traded": true,
"ticker": "AAPL",
"lei": "HWUPKR0MPOU8FGXBT394",
"has_lei": true,
"companies_source": "entity",
"aliases": [
{
"name": "Apple Computer Inc.",
"type": "former_name",
"source_office_code": "US"
},
{
"name": "Apple Computer, Inc.",
"type": "former_name",
"source_office_code": "US"
}
],
"identifiers": [
{
"office_code": "EM",
"identifier": "123456",
"identifier_type": "euipo_id"
}
],
"companies": [
{
"source": "sec",
"source_id": "0000320193",
"legal_name": "Apple Inc.",
"ticker": "AAPL",
"exchange": "NASDAQ",
"lei": null,
"entity_status": "active"
},
{
"source": "gleif",
"source_id": "HWUPKR0MPOU8FGXBT394",
"legal_name": "APPLE INC.",
"ticker": null,
"exchange": null,
"lei": "HWUPKR0MPOU8FGXBT394",
"entity_status": "active"
}
],
"trademark_count": 1847,
"active_count": 1290,
"stats": {
"trademark_count": 1847,
"registered_count": 1203,
"pending_count": 87,
"expired_count": 312,
"cancelled_count": 45,
"abandoned_count": 200,
"unknown_count": 0,
"grant_rate": 0.651,
"abandonment_rate": 0.108,
"jurisdiction_count": 5,
"earliest_filing_date": "1985-04-01",
"latest_filing_date": "2026-03-15",
"computed_at": "2026-03-24T00:00:00Z"
},
"created_at": "2023-01-11T08:00:00Z",
"updated_at": "2026-03-24T00:00:00Z",
"request_id": "req_xyz789"
}
Owners
Retrieve Owner
Retrieve an owner profile by ID
GET
/
v1
/
owners
/
{id}
Retrieve Owner
curl --request GET \
--url https://api.signa.so/v1/owners/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/owners/{id}"
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/{id}', 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/{id}",
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/{id}"
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/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/owners/{id}")
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{
"id": "own_R3jK9mN2",
"object": "owner",
"name": "Apple Inc.",
"canonical_name": "APPLE INC",
"name_original_script": null,
"country_code": "US",
"legal_form": "corporation",
"address": {
"lines": ["One Apple Park Way"],
"city": "Cupertino",
"region": "CA",
"postal_code": "95014",
"country_code": "US",
"formatted": null
},
"entity_id": "ent_R3jK9mN2",
"publicly_traded": true,
"ticker": "AAPL",
"lei": "HWUPKR0MPOU8FGXBT394",
"has_lei": true,
"companies_source": "entity",
"aliases": [
{
"name": "Apple Computer Inc.",
"type": "former_name",
"source_office_code": "US"
},
{
"name": "Apple Computer, Inc.",
"type": "former_name",
"source_office_code": "US"
}
],
"identifiers": [
{
"office_code": "EM",
"identifier": "123456",
"identifier_type": "euipo_id"
}
],
"companies": [
{
"source": "sec",
"source_id": "0000320193",
"legal_name": "Apple Inc.",
"ticker": "AAPL",
"exchange": "NASDAQ",
"lei": null,
"entity_status": "active"
},
{
"source": "gleif",
"source_id": "HWUPKR0MPOU8FGXBT394",
"legal_name": "APPLE INC.",
"ticker": null,
"exchange": null,
"lei": "HWUPKR0MPOU8FGXBT394",
"entity_status": "active"
}
],
"trademark_count": 1847,
"active_count": 1290,
"stats": {
"trademark_count": 1847,
"registered_count": 1203,
"pending_count": 87,
"expired_count": 312,
"cancelled_count": 45,
"abandoned_count": 200,
"unknown_count": 0,
"grant_rate": 0.651,
"abandonment_rate": 0.108,
"jurisdiction_count": 5,
"earliest_filing_date": "1985-04-01",
"latest_filing_date": "2026-03-15",
"computed_at": "2026-03-24T00:00:00Z"
},
"created_at": "2023-01-11T08:00:00Z",
"updated_at": "2026-03-24T00:00:00Z",
"request_id": "req_xyz789"
}
Credits: 1 per record.
Overview
Returns the full detail tier for a single owner: canonical name, address, aliases, alternate identifiers, entity linkage, public-company matches (when available), and computed portfolio statistics. If the owner record was merged into another (entity resolution), the endpoint returns410 entity_merged with the new ID in the error body.
Path Parameters
string
required
Owner ID (e.g.
own_R3jK9mN2).Response
string
Owner ID (
own_*)string
Always
"owner"string
Display name of the owner
string
Normalized name used for search and deduplication
string
Owner name in original script (may be null)
string
ISO country code
string | null
The kind of legal person (e.g.
corporation, individual), normalised from the office’s entity-type code; null when the office states none.object | null
Postal address as the office recorded it, in the one address shape:
lines[] (verbatim), city, region, postal_code, country_code and formatted (the office’s single-string rendering, or null). Components are filled only when the office supplied them; null when no address is on file.string | null
The company profile this owner is linked into (
ent_*), or null when it is not linked to one. See Retrieve Entity. Group unlinked owners by their own id.boolean
Whether the owner’s company matches include an active SEC company with a ticker. For an owner linked to a company profile, this is the profile’s
publicly_traded, which is also true when the profile is itself listed or is a subsidiary of a listed company. A false value means no confirmed match, not confirmed-private.string | null
The owner’s own first SEC ticker. When it has none and is linked to a company profile, the profile’s
ticker, which can be a ticker inherited from a listed parent company. null when there is none.string | null
The owner’s own first GLEIF LEI. When it has none and is linked to a company profile, the profile’s
lei. null when there is none.boolean
Whether the owner’s company matches include a GLEIF LEI. For an owner linked to a company profile, the profile’s
has_lei.string
entity when the company facts are inherited across the linked company profile’s members, or direct when the owner reports only its own matches: it isn’t linked, or its profile is no longer served (Retrieve Entity returns 404).object[]
object[]
Office-issued identifiers for this owner record (for example an EUIPO applicant id), each
{office_code, identifier, identifier_type}. Public-company identifiers (SEC, GLEIF) are under companies.object[]
Omitted when the owner has no matched company records. When the owner is linked to a company profile, this is the union of all linked members’ company matches, the owner’s own first.
Show Public company match
Show Public company match
string
Data source (e.g.
sec, gleif)string
Source-specific identifier
string
Company legal name from the source record
string | null
Stock ticker symbol for SEC matches
string | null
Stock exchange for SEC matches
string | null
Legal Entity Identifier for GLEIF matches
string
active, inactive, or delistednumber
Match confidence, when available
string | null
When the match was verified, when available
string | null
Verifier identifier, when available
integer
Distinct marks owned (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed.
integer
Count of active trademarks (registered + pending). Always present; 0 when stats not yet computed.
object
Show Portfolio statistics
Show Portfolio statistics
integer
Total trademarks owned. Counts marks: a Madrid IR family counts once, matching the default grouped
GET /v1/trademarks listings.integer
Office records (record grain) in this status bucket. Every record is in exactly one of the six buckets (
registered, pending, expired, cancelled, abandoned, unknown), so the six counts sum to the records counted. A Madrid IR counts once per designation record, so the counts can sum to more than trademark_count. Includes records whose cancellation is pending (pending_cancellation): they stay registered until it is decided.integer
Office records (record grain) in this status bucket. Every record is in exactly one of the six buckets (
registered, pending, expired, cancelled, abandoned, unknown), so the six counts sum to the records counted. A Madrid IR counts once per designation record, so the counts can sum to more than trademark_count. Every stage before registration, including opposition_period and allowed.integer
Office records (record grain) in this status bucket. Every record is in exactly one of the six buckets (
registered, pending, expired, cancelled, abandoned, unknown), so the six counts sum to the records counted. A Madrid IR counts once per designation record, so the counts can sum to more than trademark_count.integer
Office records (record grain) in this status bucket. Every record is in exactly one of the six buckets (
registered, pending, expired, cancelled, abandoned, unknown), so the six counts sum to the records counted. A Madrid IR counts once per designation record, so the counts can sum to more than trademark_count. Includes surrendered and invalidated records.integer
Office records (record grain) in this status bucket. Every record is in exactly one of the six buckets (
registered, pending, expired, cancelled, abandoned, unknown), so the six counts sum to the records counted. A Madrid IR counts once per designation record, so the counts can sum to more than trademark_count. Includes withdrawn and refused records.integer
Office records (record grain) in this status bucket. Every record is in exactly one of the six buckets (
registered, pending, expired, cancelled, abandoned, unknown), so the six counts sum to the records counted. A Madrid IR counts once per designation record, so the counts can sum to more than trademark_count. Records whose office status is not known (status stage unknown).number
Share of concluded prosecutions (registered + expired + cancelled) that were ever granted. Record grain.
number
Share of concluded prosecutions (record grain) that ended abandoned, withdrawn or refused: abandoned / (registered + expired + cancelled + abandoned).
integer
Distinct offices among the records. A Madrid IR’s designations recorded by WIPO count as one office.
string
Earliest filing date (ISO 8601)
string
Most recent filing date (ISO 8601)
string
When this stats row was last recomputed (ISO 8601). The row only changes when a value changes.
string
ISO 8601 creation timestamp.
string
ISO 8601 last update timestamp.
string
Unique request identifier for support and debugging.
Public-company facts are served through the owner’s company profile. When an owner is linked to a company profile,
publicly_traded, ticker, lei and has_lei are the profile’s, as Retrieve Entity returns them, except that the owner’s own SEC ticker and GLEIF LEI come first. So a non-US office record that itself carries no ticker still surfaces the company’s ticker and LEI, including a listing ticker inherited from a listed parent. companies[] lists every linked member’s SEC/GLEIF matches. companies_source is entity in that case and direct for an owner with no links. When the profile was merged into another, the facts are the surviving profile’s.{
"id": "own_R3jK9mN2",
"object": "owner",
"name": "Apple Inc.",
"canonical_name": "APPLE INC",
"name_original_script": null,
"country_code": "US",
"legal_form": "corporation",
"address": {
"lines": ["One Apple Park Way"],
"city": "Cupertino",
"region": "CA",
"postal_code": "95014",
"country_code": "US",
"formatted": null
},
"entity_id": "ent_R3jK9mN2",
"publicly_traded": true,
"ticker": "AAPL",
"lei": "HWUPKR0MPOU8FGXBT394",
"has_lei": true,
"companies_source": "entity",
"aliases": [
{
"name": "Apple Computer Inc.",
"type": "former_name",
"source_office_code": "US"
},
{
"name": "Apple Computer, Inc.",
"type": "former_name",
"source_office_code": "US"
}
],
"identifiers": [
{
"office_code": "EM",
"identifier": "123456",
"identifier_type": "euipo_id"
}
],
"companies": [
{
"source": "sec",
"source_id": "0000320193",
"legal_name": "Apple Inc.",
"ticker": "AAPL",
"exchange": "NASDAQ",
"lei": null,
"entity_status": "active"
},
{
"source": "gleif",
"source_id": "HWUPKR0MPOU8FGXBT394",
"legal_name": "APPLE INC.",
"ticker": null,
"exchange": null,
"lei": "HWUPKR0MPOU8FGXBT394",
"entity_status": "active"
}
],
"trademark_count": 1847,
"active_count": 1290,
"stats": {
"trademark_count": 1847,
"registered_count": 1203,
"pending_count": 87,
"expired_count": 312,
"cancelled_count": 45,
"abandoned_count": 200,
"unknown_count": 0,
"grant_rate": 0.651,
"abandonment_rate": 0.108,
"jurisdiction_count": 5,
"earliest_filing_date": "1985-04-01",
"latest_filing_date": "2026-03-15",
"computed_at": "2026-03-24T00:00:00Z"
},
"created_at": "2023-01-11T08:00:00Z",
"updated_at": "2026-03-24T00:00:00Z",
"request_id": "req_xyz789"
}
Code Examples
curl "https://api.signa.so/v1/owners/own_R3jK9mN2" \
-H "Authorization: Bearer sig_YOUR_KEY"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const owner = await signa.owners.retrieve("own_R3jK9mN2");
console.log(owner.name, owner.stats?.trademark_count);
Related Endpoints
- Search Owners: filtered listing of owners
- Owner Trademarks: portfolio of marks owned
- Owner Related: corporate parent and subsidiary relationships
- Retrieve Entity: the cross-office company profile this owner belongs to