---
title: "Trademark response"
url: https://services.dev/docs/examples/legal/trademark-response
captured: [legal-build.txt, legal-trademark.txt]
---
# Trademark response

URL: https://services.dev/docs/examples/legal/trademark-response

> 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 words: matter is a job, asset is a subject, review is a task, signer is a member, network is a pool, outcome is a end (examples/legal/brand.ts).*

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.

```bash
cat services/trademark-response.ts
```

```txt title="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](https://services.dev/docs/examples/legal/build.md#servicestrademark-responsets), and `check` after it.

## A missing specimen goes back to the client

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:

```txt
→ 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"]}}}}
```

```txt title="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
```

```txt
→ GET /owner/matters/job_7Hq2   # the owner console
```

```txt title="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
```

## A short fee goes to the fee step

`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:

```txt
→ GET /owner/matters/job_7Hq2   # the owner console
```

```txt title="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.

## Abandoned

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

```txt
→ POST /matters/job_7Hq2/end {"end":"abandoned"}   # the buyer, for the client
```

```txt title="magic values: metadata.sandbox.outside = { reject: [missing_specimen] }, metadata.sandbox.outside = { reject: [fee_deficiency] }, member = mbr_eligible"
← 200 job_7Hq2 · ended · abandoned · $0
```

## Minted by a watch

[Docket watch](https://services.dev/docs/examples/legal/docket-watch.md) 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.

---

- Up: [The legal example](https://services.dev/docs/examples/legal.md)
- Previous: [Company formation](https://services.dev/docs/examples/legal/formation.md)
- Next: [Docket watch](https://services.dev/docs/examples/legal/docket-watch.md)
