Skip to main content
The Signa API is the developer-first platform for searching, analyzing, and monitoring trademarks across multiple trademark offices worldwide.

Base URL

https://api.signa.so
All endpoints are versioned with the /v1 prefix. We maintain backward compatibility within major versions.

What Makes Us Different

Unified Search

Search across USPTO, EUIPO, UKIPO, and WIPO with a single API call. No need to integrate with multiple trademark offices.

AI-Powered Analysis

Get intelligent risk assessments, class suggestions, and clearance recommendations powered by AI.

Normalized Data

Consistent data structure across all trademark offices. No more dealing with different formats.

Cross-Office Tracking

Track trademark families across jurisdictions with canonical IDs.

Core Capabilities

🔍 Search & Discovery

Text Search

GET /v1/trademarks/searchSearch by text with multiple filtering options.

Image Search

POST /v1/trademarks/search/imageFind visually similar logos and design marks.

🤖 AI-Powered Analysis

Conflict Check

POST /v1/analysis/checkQuick trademark conflict detection. Results in 300-800ms.

Clearance Search

POST /v1/analysis/clearanceDeep AI analysis with risk scoring and recommendations.

Class Suggestion

POST /v1/analysis/classifyAI-powered Nice class classification for your products.

📊 Lookup & Monitoring

Trademark Lookup

GET /v1/trademarks/{id}Get detailed information for a specific trademark.

Owner Search

GET /v1/owners/searchSearch and analyze trademark owners and their portfolios.

Monitoring & Webhooks

POST /v1/monitorsReal-time alerts for new filings and status changes.

Supported Trademark Offices

Office CodeNameCoverageTrademarks
USPTOUnited States Patent and Trademark OfficeUnited States3.5M+
EUIPOEuropean Union Intellectual Property Office27 EU countries2M+
UKIPOUK Intellectual Property OfficeUnited Kingdom500K+
WIPOWorld Intellectual Property Organization130+ countries (Madrid Protocol)1.5M+
Search across all offices simultaneously, or filter by specific offices.

Authentication

All requests require an API key in the Authorization header:
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://api.signa.so/v1/search?q=apple
Generate your API key from the dashboard. See Authentication Guide for details.

Request & Response Format

The API uses JSON for request and response bodies:
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

Main Search Endpoint

GET /v1/search?q={query}&search_type={type}&office={office}
Search Types:
  • exact - Direct text matching (default, fastest)
  • fuzzy - Typo-tolerant matching
  • phonetic - Sound-alike matching
Example Request:
curl "https://api.signa.so/v1/search?q=apple&office=USPTO&classes=9,35" \
  -H "Authorization: Bearer YOUR_API_KEY"
Example Response:
{
  "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"
      },
      "images": {
        "thumbnail": "https://cdn.signa.so/marks/us/1234567/thumb.png",
        "full": "https://cdn.signa.so/marks/us/1234567/full.png"
      },
      "related_registrations": {
        "count": 12,
        "canonical_id": "tm_canonical_apple_001",
        "same_mark_other_offices": [
          {
            "id": "tm_euipo_9876543",
            "office": "EUIPO",
            "registration_number": "123456",
            "status": "live_registered"
          }
        ]
      },
      "similarity_score": 1.0,
      "urls": {
        "api": "https://api.signa.so/v1/trademarks/tm_us_1234567",
        "web": "https://signa.so/marks/tm_us_1234567",
        "office_url": "https://tsdr.uspto.gov/#caseNumber=73222079"
      }
    }
  ],
  "pagination": {
    "total_results": 156,
    "has_more": true,
    "next_cursor": "eyJvZmZzZXQiOjUwfQ=="
  },
  "search_metadata": {
    "query": "apple",
    "search_type": "exact",
    "query_time_ms": 142,
    "offices_searched": ["USPTO"],
    "credits_used": 1
  }
}

Unified Trademark Object

All trademarks use a consistent schema regardless of trademark office:
FieldTypeDescription
idstringUnique identifier (e.g., tm_us_1234567)
canonical_idstringCross-office family ID
officeobjectTrademark office information
office_dataobjectOffice-specific numbers (registration, serial)
markobjectMark text, type, and metadata
statusobjectUnified and office-specific status
classificationsobjectNice classes and goods/services
ownersarrayCurrent and historical owners
datesobjectFiling, registration, expiry dates
imagesobjectLogo/design mark images
related_registrationsobjectSame mark in other offices
urlsobjectAPI, web, and office URLs

Unified Status Codes

We normalize status across all trademark offices:
CodeStatusDescription
LPlive_pendingApplication filed, under examination
LRlive_registeredActive registered trademark
LOlive_oppositionUnder opposition proceedings
DAdead_abandonedApplication abandoned
DCdead_cancelledRegistration cancelled
DEdead_expiredRegistration expired
Each trademark also includes the original office status for reference.

Common Query Parameters

ParameterTypeRequiredDefaultDescription
qstring-Search query
search_typeenumexactexact, fuzzy, phonetic
officestringall officesOffice code or comma-separated list
classesarrayallNice classes (1-45)
statusarrayallFilter by unified status codes
ownerstring-Filter by owner name
typearrayallword, logo, combined
thresholdfloat0.8Similarity threshold (fuzzy search)
limitinteger50Max results (1-100)
cursorstring-Pagination cursor
includearray-Additional data: images, history, related

AI-Powered Analysis

Our most powerful feature for trademark risk assessment.
POST /v1/analysis/clearance
Analyzes your proposed trademark and provides:
  • Risk assessment (CLEAR, LOW, MEDIUM, HIGH)
  • Relevant Nice class suggestions with AI reasoning
  • Detailed conflict analysis for each similar mark
  • Actionable recommendations
  • Alternative name suggestions
Example Request:
curl -X POST https://api.signa.so/v1/analysis/clearance \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "trademark": "Just Do It",
    "business_description": "Selling motivational quote posters on Amazon",
    "product_type": "posters",
    "offices": ["USPTO"]
  }'
Example Response:
{
  "trademark": "Just Do It",
  "risk_level": "HIGH",
  "risk_score": 0.95,
  "recommendation": "AVOID - High likelihood of trademark infringement",
  "relevant_classes": {
    "16": {
      "name": "Paper goods and printed matter",
      "reason": "Covers posters, prints, and paper products",
      "confidence": 0.98,
      "ai_suggested": true
    },
    "35": {
      "name": "Advertising and business",
      "reason": "Amazon marketplace selling activities",
      "confidence": 0.82,
      "ai_suggested": true
    }
  },
  "conflicts": [
    {
      "mark_id": "tm_us_1234567",
      "mark_text": "JUST DO IT",
      "owner": "Nike, Inc.",
      "office": "USPTO",
      "classes": [16, 25, 35, 41],
      "status": "live_registered",
      "risk_score": 0.98,
      "conflict_reason": "Exact match in Class 16 (paper goods). This is Nike's famous registered trademark covering posters and printed materials. Using this phrase would likely constitute trademark infringement.",
      "recommendation": "AVOID"
    }
  ],
  "analysis_summary": "The phrase 'Just Do It' is a federally registered trademark owned by Nike, Inc. It is protected in Class 16, which directly covers your intended use (posters). This is considered a 'famous mark' with broad protection. Commercial use would likely result in trademark infringement claims.",
  "alternatives_suggested": [
    "Make It Happen",
    "Take Action Now",
    "Go For It",
    "Never Give Up"
  ],
  "next_steps": [
    "Consult with a trademark attorney before proceeding",
    "Consider using one of the alternative suggestions",
    "If you proceed, expect potential legal action from Nike"
  ],
  "legal_disclaimer": "This analysis is for informational purposes only and does not constitute legal advice. Always consult a qualified trademark attorney for legal decisions.",
  "credits_used": 5
}
Find visually similar logos and design marks:
POST /v1/search/image
Upload an image or provide a URL. Uses computer vision to find similar designs. Supported formats: PNG, JPEG, GIF, WebP Maximum size: 10MB Credits: 3 per request

Monitoring & Webhooks

Set up real-time monitoring for trademark filings and changes:
POST /v1/monitors
Get webhook notifications when:
  • New trademarks matching your criteria are filed
  • Existing marks change status
  • Similar marks are detected
  • Marks are published, registered, opposed, or cancelled
See Webhooks Guide for implementation details.

Pagination

We use cursor-based pagination for efficient, consistent results:
{
  "results": [...],
  "pagination": {
    "total_results": 500,
    "has_more": true,
    "next_cursor": "eyJvZmZzZXQiOjUwfQ=="
  }
}
Use the cursor parameter for the next page:
GET /v1/search?q=tech&cursor=eyJvZmZzZXQiOjUwfQ==

Credits & Rate Limits

The API uses a credit-based system. Each operation costs credits based on complexity (1-5 credits). Every response includes credit usage in headers (X-RateLimit-*). See the Rate Limits Guide for complete pricing, tiers, and credit management.

Error Handling

All errors follow a consistent format:
{
  "error": {
    "code": "invalid_request",
    "message": "The 'q' parameter is required for search requests",
    "details": {
      "parameter": "q",
      "reason": "missing_required_parameter"
    },
    "request_id": "req_abc123xyz",
    "documentation_url": "https://docs.signa.so/errors/invalid_request"
  }
}
See Error Handling Guide for all error codes.

Data Freshness

All trademark records include metadata about data quality:
{
  "metadata": {
    "data_quality_score": 95,
    "data_completeness": 98,
    "last_verified": "2025-10-15T08:30:00Z",
    "normalization_version": "2.1"
  }
}
Data is synced daily from official sources. Each trademark includes urls.office_url for verification. See Data Sources Guide for details.

Example Use Cases

Check if a name is available before filing:
const response = await fetch(
  'https://api.signa.so/v1/search?q=MyBrand&office=USPTO,EUIPO',
  {
    headers: { 'Authorization': `Bearer ${apiKey}` }
  }
);

const data = await response.json();

if (data.results.length === 0) {
  console.log('No exact matches found!');
  // Consider fuzzy and phonetic searches too
}

AI-Powered Analysis for E-commerce Sellers

Perfect for Etsy/Amazon seller tools:
const analysis = await fetch(
  'https://api.signa.so/v1/analysis/clearance',
  {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      trademark: 'Vintage Rose Designs',
      business_description: 'Selling handmade jewelry on Etsy',
      product_type: 'jewelry'
    })
  }
);

const result = await analysis.json();
console.log(`Risk level: ${result.risk_level}`);
console.log(`Recommendation: ${result.recommendation}`);

Competitor Monitoring

Track new filings in your industry:
await fetch('https://api.signa.so/v1/monitors', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Tech competitors watch',
    watches: [
      { type: 'query', value: 'tech', search_type: 'fuzzy' }
    ],
    offices: ['USPTO'],
    classes: [9, 42],
    webhook_url: 'https://myapp.com/webhooks/trademarks',
    webhook_events: ['new_filing', 'trademark_published']
  })
});

Portfolio Management

Track renewal dates for your trademarks:
const trademark = await fetch(
  'https://api.signa.so/v1/trademarks/tm_us_1234567?include=history',
  {
    headers: { 'Authorization': `Bearer ${apiKey}` }
  }
);

const data = await trademark.json();
console.log(`Status: ${data.status.unified_status}`);
console.log(`Renewal due: ${data.dates.renewal_date}`);

Next Steps

Getting Help

Ready to start building? Get your API key → Need help? Contact us at [email protected]