Documentation Index
Fetch the complete documentation index at: https://docs.signa.so/llms.txt
Use this file to discover all available pages before exploring further.
The Signa API organizes trademark data around four core entity types. Each has its own namespace on the SDK client with retrieve(), list(), and relationship methods.
Trademarks
Retrieve
Fetch a single trademark by its Signa ID. Returns the full detail tier including owners, classifications, attorneys, media, and Madrid coverage.
const tm = await signa.trademarks.retrieve('tm_abc123');
console.log(tm.mark_text); // "SIGNA"
console.log(tm.status.primary); // "active"
console.log(tm.owners); // [{ id: 'own_...', name: 'Signa Inc.' }]
console.log(tm.classifications); // [{ nice_class: 9, ... }]
Optionally embed prosecution history:
const tm = await signa.trademarks.retrieve('tm_abc123', {
include: ['history'],
});
// The 50 most recent events are inlined
for (const event of tm.history) {
console.log(event.event_date, event.event_type, event.description);
}
History
Full prosecution event history for a trademark, paginated:
const events = await signa.trademarks.history('tm_abc123');
for await (const event of events) {
console.log(event.event_date, event.event_type);
}
Changes
Version-level change tracking — what fields changed between ingestion versions:
const changes = await signa.trademarks.changes('tm_abc123');
for await (const change of changes) {
console.log(change.changed_at, change.fields_changed);
}
Find trademarks related to a given mark (same owner, similar name, Madrid family):
const related = await signa.trademarks.related('tm_abc123');
for await (const rel of related) {
console.log(rel.trademark.mark_text, rel.relationship_type);
}
Proceedings
Oppositions, cancellations, and other proceedings linked to a trademark:
const procs = await signa.trademarks.proceedings('tm_abc123');
for await (const proc of procs) {
console.log(proc.proceeding_type, proc.status);
}
Madrid Coverage
For Madrid Protocol registrations — list the designated territories:
const coverage = await signa.trademarks.coverage('tm_abc123');
for await (const territory of coverage) {
console.log(territory.jurisdiction_code, territory.status);
}
Get a signed URL for a trademark’s image or other media asset:
const imageUrl = await signa.trademarks.media('tm_abc123', 'med_def456');
// Returns a redirect URL to the media file
Source
Provenance metadata — where the data came from and when it was last synced:
const source = await signa.trademarks.source('tm_abc123');
console.log(source.office_code); // "uspto"
console.log(source.source_type); // "bulk_daily"
console.log(source.last_synced_at); // "2025-04-14T..."
Suggest
Autocomplete suggestions as the user types:
const suggestions = await signa.trademarks.suggest({ q: 'appl' });
for (const s of suggestions.data) {
console.log(s.mark_text, s.office_code);
}
Owners
Retrieve
Fetch an owner with aliases, identifiers, address, and stats:
const owner = await signa.owners.retrieve('own_abc123');
console.log(owner.name); // "Apple Inc."
console.log(owner.country_code); // "US"
console.log(owner.stats); // { trademark_count: 1234, ... }
List
Search and filter owners:
const owners = await signa.owners.list({ q: 'Apple', country_code: 'US' });
for await (const owner of owners) {
console.log(owner.name, owner.trademark_count);
}
Owner’s Trademarks
List all trademarks owned by a specific entity:
const marks = await signa.owners.trademarks('own_abc123', {
status: 'registered',
});
for await (const tm of marks) {
console.log(tm.mark_text, tm.filing_date);
}
Corporate Relationships
Corporate parent/child relationships derived from GLEIF data:
const related = await signa.owners.related('own_abc123');
for await (const rel of related) {
console.log(rel.related_owner.name, rel.relationship_type);
// "Alphabet Inc.", "parent"
}
Attorneys
Retrieve
Fetch an attorney with firm linkage, stats, and top clients:
const attorney = await signa.attorneys.retrieve('att_abc123');
console.log(attorney.name);
console.log(attorney.firm); // { id: 'firm_...', name: '...' }
console.log(attorney.stats); // { trademark_count, ... }
List
Search attorneys by name or firm:
const attorneys = await signa.attorneys.list({ q: 'Smith' });
for await (const att of attorneys) {
console.log(att.name, att.firm?.name);
}
Attorney’s Trademarks
const marks = await signa.attorneys.trademarks('att_abc123');
for await (const tm of marks) {
console.log(tm.mark_text);
}
Attorney’s Clients
List the owners (clients) represented by this attorney:
const clients = await signa.attorneys.clients('att_abc123');
for await (const client of clients) {
console.log(client.owner.name, client.trademark_count);
}
Firms
Retrieve
const firm = await signa.firms.retrieve('firm_abc123');
console.log(firm.name);
console.log(firm.attorney_count);
console.log(firm.stats);
List
const firms = await signa.firms.list({ q: 'Morrison' });
for await (const firm of firms) {
console.log(firm.name, firm.attorney_count);
}
Firm’s Attorneys
const attorneys = await signa.firms.attorneys('firm_abc123', {
sort: '-trademark_count',
});
for await (const att of attorneys) {
console.log(att.name, att.trademark_count);
}
Firm’s Trademarks
const marks = await signa.firms.trademarks('firm_abc123');
for await (const tm of marks) {
console.log(tm.mark_text, tm.office_code);
}
Proceedings
Standalone access to opposition, cancellation, and other tribunal proceedings:
Retrieve
const proc = await signa.proceedings.retrieve('prc_abc123');
console.log(proc.proceeding_type); // "opposition"
console.log(proc.status); // "pending"
console.log(proc.parties);
List
// Proceedings for a specific trademark
const procs = await signa.proceedings.list({ trademark_id: 'tm_abc123' });
// Filter by type and status
const oppositions = await signa.proceedings.list({
proceeding_type: 'opposition',
status: 'pending',
});
Cross-Entity Suggest
Search across all entity types in a single call — useful for building omnisearch UIs:
const suggestions = await signa.suggest.crossEntity({ q: 'apple' });
for (const s of suggestions.data) {
console.log(s.type, s.text); // "trademark", "APPLE" / "owner", "Apple Inc."
}
// Limit to a specific type
const ownerSuggestions = await signa.suggest.crossEntity({
q: 'apple',
type: 'owner',
});