Skip to main content

Searching Trademarks

const results = await signa.search.query({
  query: 'signa',
  strategies: ['phonetic'],
  filters: {
    offices: ['uspto', 'euipo'],
    nice_classes: [9, 42],
    status_stage: ['registered'],
  },
  options: { aggregations: ['office_code', 'nice_classes'] },
});

console.log(`Found ${results.data.length} results on this page`);
console.log(results.aggregations.office_code);

Pagination

Use the async iterator for automatic pagination:
for await (const mark of signa.trademarks.list({ 'offices[]': ['uspto'] })) {
  console.log(mark.mark_text);
}
Or manually with pages:
let page = await signa.trademarks.list({ 'offices[]': ['uspto'], limit: 100 });
const allMarks = [...page.data];

while (page.has_more) {
  page = await page.getNextPage();
  allMarks.push(...page.data);
}

console.log(`Total: ${allMarks.length}`);

Error Handling

import { SignaAPIError } from '@signa-so/sdk';

try {
  const mark = await signa.trademarks.retrieve('tm_invalid');
} catch (err) {
  if (err instanceof SignaAPIError) {
    console.error(err.error.type); // "not_found"
    console.error(err.message);    // "Trademark tm_invalid not found"
    console.error(err.request_id); // "req_abc123"
    console.error(err.status);     // 404
  }
}

Managing Portfolios

// Create a portfolio
const portfolio = await signa.portfolios.create({
  name: 'Core Brand',
  description: 'Primary brand marks',
});

// Add marks
await signa.portfolios.addMarks(portfolio.id, {
  trademark_ids: ['tm_abc', 'tm_def', 'tm_ghi'],
});

// List portfolio marks
const marks = await signa.portfolios.retrieve(portfolio.id);
console.log(`${marks.mark_count} marks in portfolio`);