Skip to main content
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

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
  }
}
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
  }
}
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"
  }'
{
  "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"
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

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 →