Trademark response

The running jobjob_7Hq2 · waiting · on claim · $149.00 held · sign · tsk_7Hq2

An office action answered and filed. The client sends the specimen through her own link, an attorney signs the response, and the office's typed rejections route the matter back to the step that repairs it, the client's evidence or a fee. A client who stops can end it, owing only the acts done.

legal's wordsmatter is a jobasset is a subjectreview is a tasksigner is a membernetwork is a pooloutcome is a end

The AI reads the office action, citing it, and asks the client for a specimen of the mark in use. It drafts the response, an adversarial review attacks it, and an attorney admitted in any state signs it, stamped. The brand files it, and the office's receipt releases the charge.

Run
cat services/trademark-response.ts
magic values: none
    evidence: { ask: 'client', to: 'upload', items: () => [{ id: 'specimen', label: 'A specimen showing the mark in use' }] },
    respond: { by: 'attorney', stamp: true, est: '1h', checklist: ['every ground is answered', 'the specimen shows use'] },
    file: {
      submit: 'https://filings.example.test/trademark-office', to: 'USPTO', receipt: 'receipt',
      rejected: { missing_specimen: 'evidence', fee_deficiency: 'fee', '*': 'draft' },
    fee: { routed: true, submit: 'https://filings.example.test/fees', to: 'USPTO', receipt: 'receipt', next: () => 'file' },
  ends: { abandoned: { charge: 'acts', by: ['client', 'clock'] } },
  price: { usd: 349, release: 'file' },

The whole file, and check after it.

The office turns the first response down with missing_specimen. rejected routes that code to evidence, so the client's own link opens again for a new specimen, the attorney signs the redrafted response, and the second filing is accepted:

Call
→ POST /matters {"service":"trademark-response","serial":"97123456","action":"office-action.pdf","issued":"2026-10-01","client":{"name":"Ada Lovelace","email":"ada@example.com"},"max_usd":349,"key":"specimen","metadata":{"sandbox":{"outside":{"reject":["missing_specimen"]}}}}
magic values: metadata.sandbox.outside = { reject: [missing_specimen] }, metadata.sandbox.outside = { reject: [fee_deficiency] }, member = mbr_eligible
← job_7Hq2 · waiting · on party · $349.00 held · consent · ask_7Hq2
# Ada, the client, through her own link
→ POST /asks/ask_7Hq2?t=… {}   # Ada Lovelace: consent, to consent
← job_7Hq2 · waiting · on party · $349.00 held · evidence · ask_7Hq3
# Ada, the client, through her own link
→ POST /asks/ask_7Hq3?t=… {"items":{"specimen":{"file":{"url":"data:text/plain,The%20mark%20on%20the%20box.","name":"specimen.jpg"}}}}   # Ada Lovelace: evidence, to upload
← job_7Hq2 · waiting · on claim · $349.00 held · respond · tsk_7Hq2
# mbr_eligible, in their own session: GET /tasks/tsk_7Hq2/sheet · POST /tasks/tsk_7Hq2/claim · POST /tasks/tsk_7Hq2/clear
→ POST /reviews/tsk_7Hq2/attest {"checklist":["every ground is answered","the specimen shows use"]}   # as mbr_eligible
← job_7Hq2 · waiting · on party · $349.00 held · evidence · ask_7Hq4
# Ada, the client, through her own link
→ POST /asks/ask_7Hq4?t=… {"items":{"specimen":{"file":{"url":"data:text/plain,The%20mark%20on%20the%20box.","name":"specimen.jpg"}}}}   # Ada Lovelace: evidence, to upload
← job_7Hq2 · waiting · on claim · $349.00 held · respond · tsk_7Hq3
# mbr_eligible, in their own session: GET /tasks/tsk_7Hq3/sheet · POST /tasks/tsk_7Hq3/claim · POST /tasks/tsk_7Hq3/clear
→ POST /reviews/tsk_7Hq3/attest {"checklist":["every ground is answered","the specimen shows use"]}   # as mbr_eligible
← job_7Hq2 · delivered · $349.00 charged
Call
→ GET /owner/matters/job_7Hq2   # the owner console
magic values: metadata.sandbox.outside = { reject: [missing_specimen] }, metadata.sandbox.outside = { reject: [fee_deficiency] }, member = mbr_eligible
← job_7Hq2 · delivered · $349.00 charged
  record  consent · client · consent | read · ai | evidence.specimen · answered | evidence · client · upload | draft · ai | attack · ai · adversarial · 3 lenses · pass | respond · person · bar admission · * · mbr_eligible | file · USPTO · rejected · missing_specimen · repairing at evidence | evidence.specimen · answered | evidence · client · upload | draft · ai | attack · ai · adversarial · 3 lenses · pass | respond · person · bar admission · * · mbr_eligible | file · USPTO · accepted · rcp_7Hq3
  ledger  +$349.00 · attorney's fee $350.00, sold by the attorney (rail member) · brand −$1.00 · AI $3.78 · you −$4.78
  events  matter.ordered · charge.held · ask.opened · matter.paused · consent.given · ask.done · step.proposed · step.committed · decision.made · step.proposed · step.committed · ask.opened · matter.paused · item.done · ask.done · step.proposed · step.committed · decision.made · step.proposed · step.committed · decision.made · decision.made · decision.made · review.done · step.proposed · step.committed · matter.paused · review.posted · review.offered · review.claimed · matter.paused · step.proposed · step.committed · pay.accrued · submission.sent · receipt.rejected · ask.opened · matter.paused · item.done · ask.done · step.proposed · step.committed · decision.made · step.proposed · step.committed · decision.made · decision.made · decision.made · review.done · step.proposed · step.committed · matter.paused · review.posted · review.offered · review.claimed · matter.paused · step.proposed · step.committed · pay.accrued · submission.sent · receipt.accepted · step.proposed · step.committed · charge.collected · matter.delivered

fee_deficiency routes to fee, a routed submit step that pays the office and hands back to file. No one re-signs, and the record shows both receipts:

Call
→ GET /owner/matters/job_7Hq2   # the owner console
magic values: metadata.sandbox.outside = { reject: [missing_specimen] }, metadata.sandbox.outside = { reject: [fee_deficiency] }, member = mbr_eligible
← job_7Hq2 · delivered · $349.00 charged
  record  consent · client · consent | read · ai | evidence.specimen · answered | evidence · client · upload | draft · ai | attack · ai · adversarial · 3 lenses · pass | respond · person · bar admission · * · mbr_eligible | file · USPTO · rejected · fee_deficiency · repairing at fee | fee · USPTO · accepted · rcp_7Hq3 | file · USPTO · accepted · rcp_7Hq4
  ledger  +$349.00 · attorney's fee $175.00, sold by the attorney (rail member) · brand $174.00 · AI $2.10 · you $171.90
  events  matter.ordered · charge.held · ask.opened · matter.paused · consent.given · ask.done · step.proposed · step.committed · decision.made · step.proposed · step.committed · ask.opened · matter.paused · item.done · ask.done · step.proposed · step.committed · decision.made · step.proposed · step.committed · decision.made · decision.made · decision.made · review.done · step.proposed · step.committed · matter.paused · review.posted · review.offered · review.claimed · matter.paused · step.proposed · step.committed · pay.accrued · submission.sent · receipt.rejected · submission.sent · receipt.accepted · step.proposed · step.committed · submission.sent · receipt.accepted · step.proposed · step.committed · charge.collected · matter.delivered

Any other code goes back to draft, and the AI redrafts with the code in its feedback.

A client who stops answering, or ends it, ends the matter abandoned, owing only the paid acts done so far: here none, so $0:

Call
→ POST /matters/job_7Hq2/end {"end":"abandoned"}   # the buyer, for the client
magic values: metadata.sandbox.outside = { reject: [missing_specimen] }, metadata.sandbox.outside = { reject: [fee_deficiency] }, member = mbr_eligible
← 200 job_7Hq2 · ended · abandoned · $0

Docket watch offers this Service when an office action lands on a patent family it watches, and the order joins that family. The response date is a clock on the family: three months from the action, with an extension that moves it.