Search Attorneys
curl --request GET \
--url https://api.signa.so/v1/attorneys \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/attorneys"
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/attorneys', 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/attorneys",
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/attorneys"
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/attorneys")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/attorneys")
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": "att_3kPq9X",
"object": "attorney",
"name": "Jane R. Smith",
"canonical_name": "JANE R SMITH",
"firm_name": "Smith & Associates LLP",
"country_code": "US",
"source_office_code": "US",
"trademark_count": 1284,
"active_count": 1097
}
],
"has_more": true,
"pagination": { "cursor": "eyJpZCI6Imp..." },
"request_id": "req_xyz"
}
Attorneys
Search Attorneys
Search attorneys representing trademark owners across all offices
GET
/
v1
/
attorneys
Search Attorneys
curl --request GET \
--url https://api.signa.so/v1/attorneys \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/attorneys"
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/attorneys', 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/attorneys",
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/attorneys"
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/attorneys")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/attorneys")
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": "att_3kPq9X",
"object": "attorney",
"name": "Jane R. Smith",
"canonical_name": "JANE R SMITH",
"firm_name": "Smith & Associates LLP",
"country_code": "US",
"source_office_code": "US",
"trademark_count": 1284,
"active_count": 1097
}
],
"has_more": true,
"pagination": { "cursor": "eyJpZCI6Imp..." },
"request_id": "req_xyz"
}
Credits: 10 per page.
Overview
Returns a paginated list of attorneys derived from the trademark records Signa has ingested. Use this for attorney lookup, prosecution counsel discovery, or building a competitive view of who is filing for whom. Search is a fuzzy, typo-tolerant name match; withoutsort, exact names and larger portfolios rank first.
Query Parameters
string
Fuzzy, typo-tolerant attorney name search. Without
sort, exact names and larger portfolios rank first. Once the attorney search index has been rebuilt it also matches the names of the firms on the attorney’s filings.string
Restrict to attorneys with at least one current filing that names this firm (
firm_...). An attorney who filed with several firms appears under each of them.string
ISO 3166-1 alpha-2 country code filter. Matches the attorney’s
country_code, which is nullable: rows whose office gave no country are excluded from a filtered search.string
default:"-trademark_count"
Sort field. One of
-trademark_count, trademark_count, -grant_rate, grant_rate, -avg_prosecution_days, avg_prosecution_days, -latest_filing, latest_filing, -name, name.boolean
default:"false"
When
true, adds pagination.total_count. See Pagination.integer
default:"20"
Page size, between 1 and 100.
string
Pagination cursor from a previous response.
Response
object[]
Array of attorney summary records.
string
Attorney ID (
att_...).string
Display name of the attorney.
string
Normalized name used for entity resolution.
string | null
Firm on the attorney’s most recent current filing (by filing date) that names a firm;
null when no filing names one. Retrieve Attorney lists every firm in firms.string
Two-letter country code.
string | null
WIPO ST.3 code of the office whose records this attorney row comes from. Attorney records are per office: the same person appears once per office they file at, each row with its own
source_office_code.integer
Total trademarks attributed to this attorney. 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.
{
"object": "list",
"data": [
{
"id": "att_3kPq9X",
"object": "attorney",
"name": "Jane R. Smith",
"canonical_name": "JANE R SMITH",
"firm_name": "Smith & Associates LLP",
"country_code": "US",
"source_office_code": "US",
"trademark_count": 1284,
"active_count": 1097
}
],
"has_more": true,
"pagination": { "cursor": "eyJpZCI6Imp..." },
"request_id": "req_xyz"
}
Code Examples
curl "https://api.signa.so/v1/attorneys?q=smith&country_code=US&sort=-trademark_count&limit=20" \
-H "Authorization: Bearer sig_YOUR_KEY"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const page = await signa.attorneys.list({
q: "smith",
country_code: "US",
sort: "-trademark_count",
limit: 20,
});
Related Endpoints
- Retrieve Attorney: full attorney detail
- Attorney Trademarks: marks handled by an attorney
- Attorney Clients: owners represented by an attorney
- Search Firms: search firms instead