---
title: "Publish before it takes orders"
url: https://services.dev/docs/service/status
captured: [legal-region.txt, service-check.txt, service-status.txt, tax-check.txt]
codes: [not_live]
---
# Publish before it takes orders

URL: https://services.dev/docs/service/status

> status publishes a Service before it sells. A roadmap Service shows its types and price everywhere and answers not_live with a waitlist; a preview takes test keys only.

`status` answers one question: can a buyer order this Service yet? Publish a Service before it sells, and its demand is on the record the day it opens.

## Smallest form

```ts title="services/subtitles.ts"
  status: 'roadmap',
  price: 39,
```

```bash
npx services.dev check
```

```txt title="magic values: none"
services/subtitles.ts · 5 lines · roadmap · $39 per job, within 48 hours, charged on delivery.
  who     AI delivers every job.
  steps   draft · ai → review · ai · adversarial
  agent   order_subtitles · 23 of 30 words · on the roadmap, so an order answers not_live with the waitlist
```

## Every form

Whether the Service takes orders: live; preview, on test keys only; or roadmap, published with its types and price, answering `not_live`.

**On the Service**

| Key | Written | Left out | Does |
|---|---|---|---|
| `status` | `Status` | `'live'` | `'live'`, `'preview'` (test keys only) or `'roadmap'` (published, answering not_live). |

## Roadmap

A roadmap Service is published on every surface with its types and its price, so buyers and agents can see what's coming and plan for it. An order answers 403 `not_live`, and `next` is the waitlist:

```txt
→ POST /subtitles {"video":"https://example.com/launch.mp4","to":"es","max_usd":39,"key":"roadmap"}
```

```txt title="403 · magic values: none"
  "code": "not_live",
  "reason": "Subtitles is on the roadmap: published with its price, and taking no orders yet.",
    "do": "waitlist",
      "email": null
    "http": "POST http://localhost:8787/subtitles/waitlist",
```

```txt
→ POST /subtitles/waitlist {"email":"ada@example.com"}
```

```json title="200 · magic values: none"
{
  "object": "waitlist",
  "service": "subtitles",
  "status": "roadmap",
  "position": 1,
  "simulated": true
}
```

`next` carries the call to make, `POST /subtitles/waitlist`, with the one argument to fill. Nothing is charged.

A [rules row](https://services.dev/docs/people/rules.md) does the same per region. Where it isn't ratified, an order answers 403 `region_not_ratified` at $0, naming the regions where it is, and `next` is the same waitlist. The legal example's contract review is ratified in three states:

```txt
→ POST /matters {"service":"contract-review","contract":{"url":"data:text/plain,A%20lease.","name":"lease.pdf"},"client":{"name":"Ada Lovelace","email":"ada@example.com"},"client_region":"US-FL","max_usd":99,"key":"lease-fl"}
```

```txt title="403 · magic values: none"
  "code": "region_not_ratified",
  "reason": "advise is ratified in US-CA, US-NY, US-TX under rules 2026-10, and this order's region is US-FL.",
    "do": "waitlist",
    "http": "POST http://localhost:8787/contract-review/waitlist",
```

## Preview

A preview Service takes orders on test keys only, so you and your first buyers can run it end to end before it goes live. On localhost every call is a test call:

```txt
→ POST /dubbing {"video":"https://example.com/launch.mp4","to":"es","max_usd":149,"key":"preview"}
```

```txt title="202 · job_7Hq2 · delivered · audio.txt · $149.00 charged · magic values: none"
← 202 · job_7Hq2 · delivered · audio.txt · $149.00 charged
```

## Seven surfaces

| Op | API | CLI | MCP | SDK | Site | Docs | App |
|---|---|---|---|---|---|---|---|
| `service.waitlist` | `POST /:service/waitlist` |  |  |  | `/<service>`: the waitlist | 2 error pages |  |

[Operations](https://services.dev/docs/reference/operations.md) has every column of every row.

## Refusals

| Code | Category | HTTP | Why |
|---|---|---|---|
| [`not_live`](https://services.dev/docs/reference/errors.md#not_live) | unavailable | 403 | This Service takes no orders yet. |

## In the example brands

The lines that use it in the example brands, as their files write them, and what `check` read aloud for each file.

```ts title="tax · services/transcript.ts · 18 lines"
  status: 'roadmap',
```

```txt title="npx services.dev check · captured/tax-check.txt"
services/transcript.ts · 18 lines · roadmap · $12 per job, within 48 hours, charged on order's receipt, or at disclose for a return the brand filed.
  steps   disclose · the brand · on the §7216 consent, when the source is filed → consent · taxpayer · sign · Form 4506-C, when the source is ives → review · ai · adversarial → order · IRS, through the participant program, when the source is ives → fields · ai · cites the filing by its receipt, or the transcript: each field by its form, tax year and line → income · code · cites Form 1084, 24-month average
```

[The tax example](https://services.dev/docs/examples/tax.md) runs every one of its files, captured.

---

- Up: [Service()](https://services.dev/docs/service.md)
- Previous: [Evidence and replay](https://services.dev/docs/service/evidence.md)
- Next: [Brand()](https://services.dev/docs/service/brand.md)
