Searching Trademarks
Copy
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:Copy
for await (const mark of signa.trademarks.list({ 'offices[]': ['uspto'] })) {
console.log(mark.mark_text);
}
Copy
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
Copy
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
Copy
// 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`);