Skip to main content
You are preparing to launch a new brand called “Vyntra” for a line of cloud security software. Before investing in branding and legal filings, you need to determine whether the name is available across your target markets (US, EU, and Canada) in Nice classes 9 and 42. This guide walks through a full clearance workflow using the Signa API — from initial search to conflict analysis.
Coming soon: Automated Clearance Intelligence. We are building a dedicated clearance agent and scoring endpoint that will automate conflict analysis, risk scoring, and report generation. Instead of manually triaging results, you will be able to call a single endpoint that returns a structured clearance opinion with per-conflict risk scores, similarity breakdowns, and recommended actions. Stay tuned — this is actively in development. Contact us if you would like early access.

Prerequisites

  • A Signa API key with search:read and trademarks:read scopes
  • Your target brand name, jurisdictions, and Nice classes

1

Run a phonetic search across jurisdictions

Start with a broad search using multiple strategies. Phonetic matching catches near-misses that exact search would miss — for example, “Ventra”, “Vintra”, or “Wyntra”.
curl -X POST https://api.signa.so/v1/trademarks/search \
  -H "Authorization: Bearer $SIGNA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Vyntra",
    "strategies": ["exact", "phonetic", "fuzzy", "prefix"],
    "filters": {
      "offices": ["uspto", "euipo", "cipo"],
      "nice_classes": [9, 42],
      "status_stage": ["filed", "examining", "published", "registered", "opposition_period"]
    },
    "options": {
      "aggregations": ["status_stage", "office_code", "nice_classes"]
    },
    "limit": 50
  }'
Expected output:
{
  "search_meta": {
    "total": { "value": 14, "relation": "eq" },
    "took_ms": 87,
    "timed_out": false
  },
  "aggregations": {
    "status_stage": { "registered": 6, "examining": 4, "abandoned": 3, "expired": 1 },
    "office_code": { "uspto": 8, "euipo": 4, "cipo": 2 },
    "nice_classes": { "9": 10, "42": 7, "35": 3 }
  },
  "object": "list",
  "data": [
    {
      "id": "tm_a1b2c3d4",
      "mark_text": "VENTRA",
      "status": { "primary": "active", "stage": "registered" },
      "office_code": "uspto",
      "nice_classes": [9, 42],
      "relevance_score": 88,
      "match_explanation": {
        "phonetic": { "score": 94, "algorithm": "double_metaphone" },
        "text": { "score": 72, "edit_distance": 2 }
      }
    }
  ]
}
The match_explanation field tells you why each result matched. A phonetic score above 90 means the names sound nearly identical — a serious conflict risk even if the spelling differs.
2

Triage results by risk level

Use the aggregations and relevance scores to categorize matches:
Risk LevelCriteria
HighPhonetic score > 85 AND same Nice class AND status is registered or examining
MediumPhonetic score 70-85 OR adjacent Nice class OR status is published / opposition_period
LowFuzzy-only match OR status is abandoned / expired
Filter the search results to isolate high-risk conflicts:
# Filter to registered marks with high relevance in the same classes
curl -X POST https://api.signa.so/v1/trademarks/search \
  -H "Authorization: Bearer $SIGNA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Vyntra",
    "strategies": ["exact", "phonetic"],
    "filters": {
      "offices": ["uspto", "euipo", "cipo"],
      "nice_classes": [9, 42],
      "status_stage": ["registered", "examining"]
    },
    "limit": 20
  }'
3

Pull full details on each conflict

For every high-risk match, fetch the detail tier to see classifications, owners, attorneys, and prosecution history.
# Batch fetch all conflict marks at once (max 100)
curl -X POST https://api.signa.so/v1/trademarks/batch \
  -H "Authorization: Bearer $SIGNA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: clearance-vyntra-batch-001" \
  -d '{
    "ids": ["tm_a1b2c3d4", "tm_e5f6a7b8", "tm_c9d0e1f2"]
  }'
Expected output (per mark):
{
  "id": "tm_a1b2c3d4",
  "mark_text": "VENTRA",
  "status": { "primary": "active", "stage": "registered" },
  "office_code": "uspto",
  "classifications": [
    {
      "nice_class": 9,
      "goods_services_text": "Computer software for payment processing and transit fare collection"
    },
    {
      "nice_class": 42,
      "goods_services_text": "Cloud computing services for payment platforms"
    }
  ],
  "owners": [
    { "id": "own_xyz789", "name": "Cubic Transportation Systems Inc.", "country_code": "US" }
  ],
  "filing_date": "2019-04-12",
  "registration_date": "2020-01-14"
}
Pay close attention to the goods_services_text in each classification. Two marks in the same Nice class can coexist if their goods and services descriptions do not overlap. “Payment processing software” and “cybersecurity software” are both Class 9 but serve different markets.
4

Review the owner's full portfolio

Understanding the conflicting owner’s portfolio reveals how aggressively they protect their brand and whether they operate in adjacent spaces.
# Get owner profile with stats
curl https://api.signa.so/v1/owners/own_xyz789 \
  -H "Authorization: Bearer $SIGNA_API_KEY"

# List their marks in classes 9 and 42
curl "https://api.signa.so/v1/owners/own_xyz789/trademarks?nice_classes[]=9&nice_classes[]=42&limit=50" \
  -H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:
{
  "stats": {
    "trademark_count": 142,
    "registered_count": 118,
    "jurisdiction_count": 12,
    "registration_rate": 0.83,
    "top_classes": [
      { "class": 9, "count": 58 },
      { "class": 42, "count": 34 },
      { "class": 35, "count": 22 }
    ]
  }
}
A high registration_rate (above 80%) and broad jurisdiction coverage suggest an owner with an active legal team. They are more likely to oppose a confusingly similar filing.
5

Check for proceedings history

See whether the conflicting mark has been involved in oppositions or cancellations. This tells you how actively the owner enforces their rights.
# Check proceedings on the conflicting mark
curl "https://api.signa.so/v1/trademarks/tm_a1b2c3d4/proceedings" \
  -H "Authorization: Bearer $SIGNA_API_KEY"

# Search for opposition proceedings involving the owner
curl "https://api.signa.so/v1/proceedings?q=Cubic+Transportation+Systems&type=opposition&limit=20" \
  -H "Authorization: Bearer $SIGNA_API_KEY"
Expected output:
{
  "object": "list",
  "data": [
    {
      "id": "prc_op001",
      "proceeding_type": "opposition",
      "status": "decided_granted",
      "parties": [
        { "owner_id": "own_xyz789", "name": "Cubic Transportation Systems Inc.", "role": "opponent" },
        { "owner_id": "own_other", "name": "Ventra Labs LLC", "role": "respondent" }
      ],
      "filed_date": "2023-06-15",
      "decision_date": "2024-02-20"
    }
  ]
}
An owner who has successfully opposed similar marks in the past poses a higher risk. In this example, Cubic already won an opposition against another “Ventra”-variant mark — strong evidence they would oppose “Vyntra” too.
6

Compile a clearance summary

Bring together all findings into a structured report. Here is a helper that assembles the data:
interface ClearanceConflict {
  trademarkId: string;
  markText: string;
  office: string;
  status: string;
  niceClasses: number[];
  phoneticScore: number;
  ownerName: string;
  ownerPortfolioSize: number;
  ownerOppositionHistory: number;
  riskLevel: "high" | "medium" | "low";
}

function assessRisk(conflict: {
  phoneticScore: number;
  status: string;
  ownerOppositions: number;
}): "high" | "medium" | "low" {
  if (conflict.phoneticScore >= 85 && conflict.status === "registered") {
    return "high";
  }
  if (conflict.phoneticScore >= 70 || conflict.ownerOppositions > 0) {
    return "medium";
  }
  return "low";
}

// Build the report
const report = {
  candidateName: "Vyntra",
  targetJurisdictions: ["us", "eu", "ca"],
  targetClasses: [9, 42],
  searchDate: new Date().toISOString(),
  totalMatches: results.search_meta.total.value,
  conflicts: conflicts.map((tm) => ({
    trademarkId: tm.id,
    markText: tm.mark_text,
    office: tm.office_code,
    status: tm.status.stage,
    niceClasses: tm.nice_classes,
    phoneticScore: tm.match_explanation.phonetic?.score ?? 0,
    ownerName: tm.owner_name,
    riskLevel: assessRisk({
      phoneticScore: tm.match_explanation.phonetic?.score ?? 0,
      status: tm.status.stage,
      ownerOppositions: 1, // from step 5
    }),
  })),
  recommendation:
    conflicts.some((c) => c.relevance_score >= 90)
      ? "HIGH RISK - Consider alternative names"
      : "MODERATE RISK - Proceed with legal counsel review",
};

console.log(JSON.stringify(report, null, 2));

Automating recurring clearance checks

If you run clearance searches regularly (for example, a naming agency evaluating candidates for clients), save the search for re-execution:
# Save the search
curl -X POST https://api.signa.so/v1/saved-searches \
  -H "Authorization: Bearer $SIGNA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: save-vyntra-clearance" \
  -d '{
    "name": "Vyntra clearance - Class 9/42 - US/EU/CA",
    "query": {
      "query": "Vyntra",
      "strategies": ["exact", "phonetic", "fuzzy"],
      "filters": {
        "offices": ["uspto", "euipo", "cipo"],
        "nice_classes": [9, 42],
        "status_stage": ["filed", "examining", "published", "registered", "opposition_period"]
      }
    }
  }'

# Re-run it later to check for new filings
curl "https://api.signa.so/v1/saved-searches/{id}/results" \
  -H "Authorization: Bearer $SIGNA_API_KEY"

What’s next

Portfolio Monitoring

Once you file your mark, set up watches to track its status through prosecution.

Opposition Tracking

Monitor TTAB proceedings if a conflict owner files an opposition against your application.

Competitor Intelligence

Track competing owners to catch new filings in your space before they publish.