Get started with the Signa API in under 5 minutes.
1. Get an API key
Create an account and generate a key in your dashboard .
Your API key will look like: tm_live_abc123xyz...
Keep your API key secure! Never commit it to version control or expose it in client-side code.
2. Make your first request
Basic Search
Search for trademarks that match “APPLE”:
export API_KEY = tm_live_abc123xyz
curl -H "Authorization: Bearer $API_KEY " \
"https://api.signa.so/v1/search?q=apple&office=USPTO"
{
"results" : [
{
"id" : "tm_us_1234567" ,
"canonical_id" : "tm_canonical_apple_001" ,
"office" : {
"code" : "USPTO" ,
"name" : "United States Patent and Trademark Office" ,
"country" : "US"
},
"office_data" : {
"registration_number" : "1078312" ,
"serial_number" : "73222079"
},
"mark" : {
"text" : "APPLE" ,
"type" : "word"
},
"status" : {
"unified_status" : "live_registered" ,
"unified_status_code" : "LR" ,
"office_status" : "Registered" ,
"status_date" : "1985-05-14"
},
"classifications" : {
"nice_classes" : [ 9 , 35 , 42 ],
"goods_services" : "Computers; Computer software; Retail services"
},
"owners" : [
{
"name" : "Apple Inc." ,
"type" : "corporation" ,
"country" : "US" ,
"role" : "owner"
}
],
"dates" : {
"filing_date" : "1981-09-04" ,
"registration_date" : "1985-05-14"
},
"similarity_score" : 1.0
}
],
"pagination" : {
"total_results" : 23 ,
"has_more" : true ,
"next_cursor" : "eyJvZmZzZXQiOjUwfQ=="
},
"search_metadata" : {
"query" : "apple" ,
"search_type" : "exact" ,
"query_time_ms" : 142 ,
"offices_searched" : [ "USPTO" ],
"credits_used" : 1
}
}
Fuzzy Search
Find trademarks similar to your query (handles typos):
curl -H "Authorization: Bearer $API_KEY " \
"https://api.signa.so/v1/search?q=goggle&search_type=fuzzy&threshold=0.8"
This will find “GOOGLE” even though you misspelled it!
{
"results" : [
{
"id" : "tm_us_9876543" ,
"mark" : {
"text" : "GOOGLE" ,
"type" : "word"
},
"status" : {
"unified_status" : "live_registered" ,
"unified_status_code" : "LR"
},
"owners" : [
{
"name" : "Google LLC" ,
"type" : "corporation"
}
],
"classifications" : {
"nice_classes" : [ 9 , 35 , 42 ]
},
"similarity_score" : 0.92
}
],
"search_metadata" : {
"query" : "goggle" ,
"search_type" : "fuzzy" ,
"threshold" : 0.8 ,
"credits_used" : 1
}
}
Phonetic Search
Find trademarks that sound similar:
curl -H "Authorization: Bearer $API_KEY " \
"https://api.signa.so/v1/search?q=knight&search_type=phonetic"
This will find “NIGHT”, “NITE”, and other sound-alike marks!
3. Search across multiple offices
Search both US and EU trademarks in one request:
curl -H "Authorization: Bearer $API_KEY " \
"https://api.signa.so/v1/search?q=tech&office=USPTO,EUIPO"
Pro tip: Omit the office parameter to search all offices simultaneously!
4. Filter by Nice classes
Search only in specific trademark classes (e.g., software = class 9, SaaS = class 42):
curl -H "Authorization: Bearer $API_KEY " \
"https://api.signa.so/v1/search?q=tech&classes=9,42&status=live_registered"
Nice Classes are international classifications for goods and services:
Class 9: Computer software, electronics, mobile apps
Class 35: Advertising, business services, e-commerce
Class 42: Software as a service (SaaS), web development
View all 45 classes →
5. Get AI clearance analysis
Our most powerful feature - AI-powered trademark clearance analysis:
curl -X POST https://api.signa.so/v1/analysis/clearance \
-H "Authorization: Bearer $API_KEY " \
-H "Content-Type: application/json" \
-d '{
"trademark": "TechFlow",
"business_description": "SaaS platform for workflow automation",
"product_type": "software"
}'
Example AI Analysis Response
{
"trademark" : "TechFlow" ,
"risk_level" : "MEDIUM" ,
"risk_score" : 0.62 ,
"recommendation" : "INVESTIGATE FURTHER - Some potential conflicts detected" ,
"relevant_classes" : {
"9" : {
"name" : "Computer software" ,
"reason" : "Your SaaS platform is software-based" ,
"confidence" : 0.95 ,
"ai_suggested" : true
},
"42" : {
"name" : "Software as a service (SaaS)" ,
"reason" : "SaaS platforms fall under Class 42" ,
"confidence" : 0.92 ,
"ai_suggested" : true
}
},
"conflicts" : [
{
"mark_id" : "tm_us_5555555" ,
"mark_text" : "TECHSTREAM" ,
"owner" : "TechStream Inc." ,
"office" : "USPTO" ,
"classes" : [ 9 , 42 ],
"status" : "live_registered" ,
"risk_score" : 0.68 ,
"conflict_reason" : "Similar mark in the same classes (workflow software). Potential confusion due to shared 'Tech' prefix and software category overlap." ,
"recommendation" : "MONITOR"
}
],
"analysis_summary" : "The mark 'TechFlow' has moderate risk due to existing similar marks in the software/SaaS space. While not identical, marks like 'TECHSTREAM' could create confusion. Consider conducting a comprehensive search or modifying the name slightly." ,
"alternatives_suggested" : [
"FlowTech Pro" ,
"AutomateFlow" ,
"WorkFlowify"
],
"next_steps" : [
"Review the conflicts in detail" ,
"Consider a more distinctive name to reduce risk" ,
"Consult with a trademark attorney for a full legal opinion"
],
"legal_disclaimer" : "This analysis is for informational purposes only and does not constitute legal advice." ,
"credits_used" : 5
}
Why this is powerful:
AI automatically suggests relevant Nice classes for your product
Analyzes conflict risk with detailed explanations
Provides actionable recommendations
Suggests alternative names if conflicts exist
Perfect for:
E-commerce sellers (Etsy, Amazon)
Naming agencies
Startups checking brand availability
Law firms doing preliminary clearance searches
6. Lookup a specific trademark
If you know the trademark ID:
curl -H "Authorization: Bearer $API_KEY " \
"https://api.signa.so/v1/trademarks/tm_us_1234567?include=related,history"
Or lookup by registration number:
curl -H "Authorization: Bearer $API_KEY " \
"https://api.signa.so/v1/offices/USPTO/registrations/1078312"
7. Search for similar logos (image search)
Upload an image to find visually similar design marks:
curl -X POST https://api.signa.so/v1/search/image \
-H "Authorization: Bearer $API_KEY " \
-F "image=@/path/to/logo.png" \
-F "office=USPTO" \
-F "threshold=0.75"
Or provide an image URL:
curl -X POST https://api.signa.so/v1/search/image \
-H "Authorization: Bearer $API_KEY " \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/logo.png",
"office": "USPTO",
"threshold": 0.75
}'
8. Set up monitoring with webhooks
Get notified when new trademarks are filed that match your criteria:
curl -X POST https://api.signa.so/v1/monitors \
-H "Authorization: Bearer $API_KEY " \
-H "Content-Type: application/json" \
-d '{
"name": "Competitor watch - Tech industry",
"description": "Monitor new filings in software/SaaS space",
"watches": [
{
"type": "query",
"value": "tech",
"search_type": "fuzzy"
},
{
"type": "class",
"value": [9, 42]
}
],
"offices": ["USPTO", "EUIPO"],
"webhook_url": "https://myapp.com/webhooks/trademarks",
"webhook_events": ["new_filing", "trademark_published", "status_change"]
}'
When a matching trademark is filed, you’ll receive a webhook:
{
"event" : "new_filing" ,
"monitor_id" : "mon_abc123" ,
"triggered_at" : "2025-10-15T14:30:00Z" ,
"trademark" : {
"id" : "tm_us_9999999" ,
"mark" : { "text" : "TECHSTREAM PRO" },
"status" : { "unified_status" : "live_pending" },
"filing_date" : "2025-10-14" ,
"classes" : [ 9 , 42 ],
"office" : "USPTO"
},
"match_reason" : "Fuzzy match with similarity score 0.85"
}
See Webhooks Guide for full implementation details.
9. Understanding credits
The API uses a simple credit-based system. Each operation costs credits based on complexity:
Text search: 1 credit
Fast conflict check: 2 credits
Deep clearance analysis: 5 credits
Image search: 3 credits
See the Rate Limits Guide for complete pricing, tiers, and how to manage your credits.
Next Steps
Code Examples
JavaScript / TypeScript
Python
Go
Ruby
const TRADEMARK_API_KEY = process . env . TRADEMARK_API_KEY ;
const BASE_URL = 'https://api.signa.so/v1' ;
async function searchTrademark ( query , options = {}) {
const params = new URLSearchParams ({
q: query ,
office: options . office || 'USPTO' ,
... options
});
const response = await fetch ( ` ${ BASE_URL } /search? ${ params } ` , {
headers: {
'Authorization' : `Bearer ${ TRADEMARK_API_KEY } `
}
});
if ( ! response . ok ) {
const error = await response . json ();
throw new Error ( error . error . message );
}
const data = await response . json ();
console . log ( `Found ${ data . results . length } trademarks` );
console . log ( `Credits used: ${ data . search_metadata . credits_used } ` );
console . log ( `Credits remaining: ${ response . headers . get ( 'X-RateLimit-Remaining' ) } ` );
return data . results ;
}
// Usage
const results = await searchTrademark ( 'apple' , {
office: 'USPTO,EUIPO' ,
classes: '9,35,42'
});
Remember: API results are informational only and not legal advice. Always consult a trademark attorney for official guidance.
Common Patterns
Check if a name is available
async function isNameAvailable ( name , productClasses ) {
const exact = await searchTrademark ( name , {
search_type: 'exact' ,
classes: productClasses . join ( ',' ),
status: 'live_registered,live_pending'
});
const fuzzy = await searchTrademark ( name , {
search_type: 'fuzzy' ,
threshold: 0.85 ,
classes: productClasses . join ( ',' )
});
if ( exact . length === 0 && fuzzy . length === 0 ) {
return { available: true , conflicts: [] };
}
return {
available: false ,
conflicts: [ ... exact , ... fuzzy ]
};
}
Get AI recommendation
async function getTrademarkRecommendation ( name , business ) {
const response = await fetch ( ` ${ BASE_URL } /analysis/clearance` , {
method: 'POST' ,
headers: {
'Authorization' : `Bearer ${ API_KEY } ` ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
trademark: name ,
business_description: business
})
});
const analysis = await response . json ();
return {
safe: analysis . risk_level === 'CLEAR' || analysis . risk_level === 'LOW' ,
risk: analysis . risk_level ,
explanation: analysis . analysis_summary ,
alternatives: analysis . alternatives_suggested
};
}
Ready to build? Get your API key →