---
title: "The services.dev CLI"
url: https://services.dev/docs/reference/cli
codes: [the]
---
# The services.dev CLI

URL: https://services.dev/docs/reference/cli

> Every npx services.dev command: what it does, who runs it, the operation it calls, and its status, with the exit codes an agent branches on.

83 commands. Yours read the folder; the rest are the operations registry's CLI column, each calling one operation against a running brand, and v2's short names stay as aliases. Every command takes `--json` and exits by the type of its answer: [Errors](https://services.dev/docs/reference/errors.md#the-clis-own-codes) has the codes.

## Yours

| Command | Does | Who runs it | Operation |
|---|---|---|---|
| <a id="init" />`npx services.dev init [name]` | write `services/<id>.ts,` its brief and AGENTS.md | you | — |
| <a id="dev" />`npx services.dev dev [--port 8787] [--members N --market tight\|normal\|flush]` | serve every Service on localhost; an agent orders a first job | you | — |
| <a id="check" />`npx services.dev check [--json]` | what each Service sells and leaves you, and anything to fix | you | — |
| <a id="sdk" />`npx services.dev sdk [--out sdk]` | write the brand's typed client: index.js, index.d.ts and package.json | you | — |
| <a id="diff" />`npx services.dev diff <before> <after>` | what a change does on the API, CLI, MCP, SDK, Site, Docs and App | you | — |
| <a id="verify" />`npx services.dev verify [--url <url>] [--surface http\|mcp\|all] [--suite <file\|url>]` | run a brand's conformance suite against it, or any suite@1 document: pass, fail, skipped | you | — |
| <a id="mcp" />`npx services.dev mcp [--url <url>]` | serve this folder's MCP server on stdio, or relay to a running brand's | you | — |
| <a id="help" />`npx services.dev help` | print this | you | — |

## Calls to a brand

| Command | Does | Who runs it | Operation |
|---|---|---|---|
| <a id="jobs-get" />`npx services.dev jobs get <job>` | read a job | buyer | [`job.get`](https://services.dev/docs/reference/operations.md#jobget) |
| <a id="jobs-wait" />`npx services.dev jobs wait <job>` | wait up to 50 seconds for a job to finish | buyer | [`job.wait`](https://services.dev/docs/reference/operations.md#jobwait) |
| <a id="jobs-list" />`npx services.dev jobs list` | the buyer's jobs, newest first | buyer | [`job.list`](https://services.dev/docs/reference/operations.md#joblist) |
| <a id="jobs-accept" />`npx services.dev jobs accept <job>` | accept a delivered job | buyer | [`job.accept`](https://services.dev/docs/reference/operations.md#jobaccept) |
| <a id="jobs-send-back" />`npx services.dev jobs send-back <job> <note>` | send a job back with a note, and the AI redoes it | buyer | [`job.send_back`](https://services.dev/docs/reference/operations.md#jobsend_back) |
| <a id="jobs-cancel" />`npx services.dev jobs cancel <job>` | cancel a job before delivery | buyer | [`job.cancel`](https://services.dev/docs/reference/operations.md#jobcancel) |
| <a id="jobs-end" />`npx services.dev jobs end <job> <end>` | end a job at one of its ends, as that end's by allows | buyer | [`job.end`](https://services.dev/docs/reference/operations.md#jobend) |
| <a id="jobs-again" />`npx services.dev jobs again <job>` | order an ended job again | buyer | [`job.again`](https://services.dev/docs/reference/operations.md#jobagain) |
| <a id="jobs-set-policy" />`npx services.dev jobs set-policy <job> k=v …` | set a job's policy values within their bounds | buyer | [`job.policy`](https://services.dev/docs/reference/operations.md#jobpolicy) |
| <a id="jobs-signal" />`npx services.dev jobs signal <job> <signal>` | raise one of the Service's inbound signals | buyer | [`job.signal`](https://services.dev/docs/reference/operations.md#jobsignal) |
| <a id="jobs-message" />`npx services.dev jobs message <job> <text>` | say something in the job's thread as the client | buyer | [`job.message`](https://services.dev/docs/reference/operations.md#jobmessage) |
| <a id="jobs-messages" />`npx services.dev jobs messages <job>` | read the job's messages, oldest first | buyer | [`job.thread`](https://services.dev/docs/reference/operations.md#jobthread) |
| <a id="jobs-record" />`npx services.dev jobs record <job>` | a job's record as you may read it, oldest first | buyer | [`job.record`](https://services.dev/docs/reference/operations.md#jobrecord) |
| <a id="jobs-approve" />`npx services.dev jobs approve <job>` | approve, sign or do a job waiting on a person | person | [`job.approve`](https://services.dev/docs/reference/operations.md#jobapprove) |
| <a id="members-add" />`npx services.dev members add <pool> <email> k=v …` | join a Pool, email first and resumable | person | [`member.join`](https://services.dev/docs/reference/operations.md#memberjoin) |
| <a id="me-availability" />`npx services.dev me availability <availability>` | set your availability | person | [`member.availability`](https://services.dev/docs/reference/operations.md#memberavailability) |
| <a id="me-ledger" />`npx services.dev me ledger` | read your conflicts ledger | person | [`member.ledger.get`](https://services.dev/docs/reference/operations.md#memberledgerget) |
| <a id="me-ledger-add" />`npx services.dev me ledger add <name> k=v …` | add a party to your conflicts ledger | person | [`member.ledger.add`](https://services.dev/docs/reference/operations.md#memberledgeradd) |
| <a id="me-ledger-checks" />`npx services.dev me ledger checks` | every check of your conflicts ledger | person | [`member.ledger.checks`](https://services.dev/docs/reference/operations.md#memberledgerchecks) |
| <a id="me-missed" />`npx services.dev me missed` | the open Tasks your own declarations kept from you | person | [`member.missed`](https://services.dev/docs/reference/operations.md#membermissed) |
| <a id="tasks-list" />`npx services.dev tasks list` | your feed | person | [`task.list`](https://services.dev/docs/reference/operations.md#tasklist) |
| <a id="tasks-get" />`npx services.dev tasks get <task>` | read a Task's teaser | person | [`task.get`](https://services.dev/docs/reference/operations.md#taskget) |
| <a id="tasks-sheet" />`npx services.dev tasks sheet <task>` | read a Task's sheet | person | [`task.sheet`](https://services.dev/docs/reference/operations.md#tasksheet) |
| <a id="tasks-pass" />`npx services.dev tasks pass <task> <reason>` | pass on a Task | person | [`task.pass`](https://services.dev/docs/reference/operations.md#taskpass) |
| <a id="tasks-claim" />`npx services.dev tasks claim <task>` | claim a Task | person | [`task.claim`](https://services.dev/docs/reference/operations.md#taskclaim) |
| <a id="tasks-clear" />`npx services.dev tasks clear <task>` | clear a held Task | person | [`task.clear`](https://services.dev/docs/reference/operations.md#taskclear) |
| <a id="tasks-packet" />`npx services.dev tasks packet <task>` | read a cleared Task's packet | person | [`task.packet`](https://services.dev/docs/reference/operations.md#taskpacket) |
| <a id="tasks-release" />`npx services.dev tasks release <task>` | give a held Task back before it is done | person | [`task.release`](https://services.dev/docs/reference/operations.md#taskrelease) |
| <a id="tasks-offer" />`npx services.dev tasks offer <task> <member>` | name the member a Task goes to | you | [`task.offer`](https://services.dev/docs/reference/operations.md#taskoffer) |
| <a id="tasks-attest" />`npx services.dev tasks attest <task> k=v …` | attest the Task you claimed and cleared | person | [`task.attest`](https://services.dev/docs/reference/operations.md#taskattest) |
| <a id="tasks-send-back" />`npx services.dev tasks send-back <task> <defects>` | send the work back with its defects | person | [`task.send_back`](https://services.dev/docs/reference/operations.md#tasksend_back) |
| <a id="tasks-decline" />`npx services.dev tasks decline <task> <memo>` | decline the Task, with a reasoned memo only the client reads | person | [`task.decline`](https://services.dev/docs/reference/operations.md#taskdecline) |
| <a id="tasks-recuse" />`npx services.dev tasks recuse <task>` | step aside from a Task you hold, for a conflict | person | [`task.recuse`](https://services.dev/docs/reference/operations.md#taskrecuse) |
| <a id="tasks-extend" />`npx services.dev tasks extend <task>` | extend your hold on a Task, once | person | [`task.extend`](https://services.dev/docs/reference/operations.md#taskextend) |
| <a id="tasks-contest" />`npx services.dev tasks contest <task> <reason>` | contest a send-back your attested work received | person | [`task.contest`](https://services.dev/docs/reference/operations.md#taskcontest) |
| <a id="tasks-message" />`npx services.dev tasks message <task> <kind> <text>` | reach the client through the job's thread, by kind | person | [`task.message`](https://services.dev/docs/reference/operations.md#taskmessage) |
| <a id="subjects-list" />`npx services.dev subjects list` | the subjects your jobs joined | buyer | [`subject.list`](https://services.dev/docs/reference/operations.md#subjectlist) |
| <a id="subjects-get" />`npx services.dev subjects get <subject>` | read a subject | buyer | [`subject.get`](https://services.dev/docs/reference/operations.md#subjectget) |
| <a id="me-subjects" />`npx services.dev me subjects` | the subjects where you are of record | person | [`member.subjects`](https://services.dev/docs/reference/operations.md#membersubjects) |
| <a id="subjects-withdraw" />`npx services.dev subjects withdraw <subject> <successor>` | withdraw as the member of record, naming your successor | person | [`subject.withdraw`](https://services.dev/docs/reference/operations.md#subjectwithdraw) |
| <a id="clocks-list" />`npx services.dev clocks list` | the clocks your jobs and their subjects run | buyer | [`clock.list`](https://services.dev/docs/reference/operations.md#clocklist) |
| <a id="clocks-get" />`npx services.dev clocks get <clock>` | read a clock | buyer | [`clock.get`](https://services.dev/docs/reference/operations.md#clockget) |
| <a id="clocks-ack" />`npx services.dev clocks ack <clock>` | acknowledge a clock you answer for | buyer | [`clock.ack`](https://services.dev/docs/reference/operations.md#clockack) |
| <a id="clocks-satisfy" />`npx services.dev clocks satisfy <clock>` | close a clock you answer for, on evidence on the record | buyer | [`clock.satisfy`](https://services.dev/docs/reference/operations.md#clocksatisfy) |
| <a id="clocks-choose" />`npx services.dev clocks choose <clock> <option>` | choose one of a clock's lapse options at its date | buyer | [`clock.choose`](https://services.dev/docs/reference/operations.md#clockchoose) |
| <a id="clocks-assign" />`npx services.dev clocks assign <clock> <member>` | assign the member who answers for a clock | you | [`clock.assign`](https://services.dev/docs/reference/operations.md#clockassign) |
| <a id="subscriptions-list" />`npx services.dev subscriptions list` | your subscriptions | buyer | [`subscription.list`](https://services.dev/docs/reference/operations.md#subscriptionlist) |
| <a id="subscriptions-get" />`npx services.dev subscriptions get <subscription>` | read a subscription | buyer | [`subscription.get`](https://services.dev/docs/reference/operations.md#subscriptionget) |
| <a id="subscriptions-cancel" />`npx services.dev subscriptions cancel <subscription>` | cancel a subscription | buyer | [`subscription.cancel`](https://services.dev/docs/reference/operations.md#subscriptioncancel) |
| <a id="members-login" />`npx services.dev members login <member>` | mint a member's own session on localhost | you | [`member.login`](https://services.dev/docs/reference/operations.md#memberlogin) |
| <a id="asks-get" />`npx services.dev asks get <ask>` | read an ask | you | [`ask.get`](https://services.dev/docs/reference/operations.md#askget) |
| <a id="asks-reissue" />`npx services.dev asks reissue <ask>` | reissue an open ask's link, to hand to its party again | buyer | [`ask.reissue`](https://services.dev/docs/reference/operations.md#askreissue) |
| <a id="jobs-files-list" />`npx services.dev jobs files list <job>` | the files a job holds, each by its sha256 | buyer | [`job.files.list`](https://services.dev/docs/reference/operations.md#jobfileslist) |
| <a id="jobs-files-put" />`npx services.dev jobs files put <job> <path>` | put a file in a job's documents plane under its own sha256 | buyer | [`job.files.put`](https://services.dev/docs/reference/operations.md#jobfilesput) |
| <a id="jobs-files-get" />`npx services.dev jobs files get <job> <sha256>` | read a file a job holds, by its sha256 | buyer | [`job.files.get`](https://services.dev/docs/reference/operations.md#jobfilesget) |
| <a id="jobs-export" />`npx services.dev jobs export <job>` | one job's evidence bundle | you | [`job.export`](https://services.dev/docs/reference/operations.md#jobexport) |
| <a id="jobs-ledger" />`npx services.dev jobs ledger <job>` | one job, as the owner reads it | you | [`job.ledger`](https://services.dev/docs/reference/operations.md#jobledger) |
| <a id="test-clocks-create" />`npx services.dev test-clocks create <frozen_at>` | make a test clock frozen at a time | test | [`test_clock.create`](https://services.dev/docs/reference/operations.md#test_clockcreate) |
| <a id="test-clocks-advance" />`npx services.dev test-clocks advance <clock> <to>` | move a test clock to a time, or by a span | test | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) |
| <a id="events-list" />`npx services.dev events list` | the brand's events after a seq | test | [`event.list`](https://services.dev/docs/reference/operations.md#eventlist) |
| <a id="listen" />`npx services.dev listen [--forward-to <url>]` | the brand's events | test | [`event.stream`](https://services.dev/docs/reference/operations.md#eventstream) |
| <a id="watches-create" />`npx services.dev watches create <url>` | watch events at a URL | test | [`watch.create`](https://services.dev/docs/reference/operations.md#watchcreate) |
| <a id="watches-list" />`npx services.dev watches list` | the watches this key holds, with their deliveries | test | [`watch.list`](https://services.dev/docs/reference/operations.md#watchlist) |
| <a id="watches-delete" />`npx services.dev watches delete <watch>` | stop a watch | test | [`watch.delete`](https://services.dev/docs/reference/operations.md#watchdelete) |
| <a id="watches-replay" />`npx services.dev watches replay <watch>` | deliver to a watch again every event it covers after a seq | test | [`watch.replay`](https://services.dev/docs/reference/operations.md#watchreplay) |
| <a id="events-send" />`npx services.dev events send <type>` | send an event in | test | [`event.inbound`](https://services.dev/docs/reference/operations.md#eventinbound) |

## Aliases

| Command | Does | Who runs it | Operation | Status |
|---|---|---|---|---|
| <a id="order" />`npx services.dev order <service> k=v …` | order a job: --max `<usd>,` --key `<key>,` --approved, --policy k=v, --metadata k=v | buyer | [`service.order`](https://services.dev/docs/reference/operations.md#serviceorder) | alias |
| <a id="get" />`npx services.dev get <job>` | jobs get | buyer | [`job.get`](https://services.dev/docs/reference/operations.md#jobget) | alias |
| <a id="wait" />`npx services.dev wait <job>` | jobs wait, until it stops working | buyer | [`job.wait`](https://services.dev/docs/reference/operations.md#jobwait) | alias |
| <a id="accept" />`npx services.dev accept <job>` | jobs accept | buyer | [`job.accept`](https://services.dev/docs/reference/operations.md#jobaccept) | alias |
| <a id="send-back" />`npx services.dev send-back <job> <note>` | jobs send-back | buyer | [`job.send_back`](https://services.dev/docs/reference/operations.md#jobsend_back) | alias |
| <a id="cancel" />`npx services.dev cancel <job>` | jobs cancel | buyer | [`job.cancel`](https://services.dev/docs/reference/operations.md#jobcancel) | alias |
| <a id="approve" />`npx services.dev approve <job>` | jobs approve | person | [`job.approve`](https://services.dev/docs/reference/operations.md#jobapprove) | alias |
| <a id="tick" />`npx services.dev tick <span> [--to <time>] [--test-clock <tc_>] [--trace] [--compare] [--market <m>]` | test-clocks advance: move dev's own clock, or --test-clock that one, by a span such as 7d or --to a time, only forward; --trace prints each timer fired (owed, fired, order, kind); --compare runs the span three ways and prints each record's sha256; --market checks dev's simulated market | test | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | alias |
| <a id="trigger" />`npx services.dev trigger <type>` | events send: fire a synthetic event, or raise a signal | test | [`event.inbound`](https://services.dev/docs/reference/operations.md#eventinbound) | alias |

## What help prints

```txt
magic values: none

$ npx services.dev help
services.dev

You
  npx services.dev                  write a Service if this folder has none, then serve it
  init [name]                       write services/<id>.ts, its brief and AGENTS.md
  dev [--port 8787] [--members N --market tight|normal|flush]  serve every Service on localhost; an agent orders a first job
  check [--json]                    what each Service sells and leaves you, and anything to fix
  sdk [--out sdk]                   write the brand's typed client: index.js, index.d.ts and package.json
  diff <before> <after>             what a change does on the API, CLI, MCP, SDK, Site, Docs and App
  verify [--url <url>] [--surface http|mcp|all] [--suite <file|url>]  run a brand's conformance suite against it, or any suite@1 document: pass, fail, skipped
  mcp [--url <url>]                 serve this folder's MCP server on stdio, or relay to a running brand's
  tasks offer <task> <member>       name the member a Task goes to
  clocks assign <clock> <member>    assign the member who answers for a clock
  members login <member>            mint a member's own session on localhost
  asks get <ask>                    read an ask
  jobs export <job>                 one job's evidence bundle
  jobs ledger <job>                 one job, as the owner reads it

A buyer, or their agent
  <service> k=v …                   order a job: --max <usd>, --key <key>, --approved, --policy k=v, --metadata k=v, --test-clock <tc_>
  jobs get <job>                    read a job
  jobs wait <job>                   wait up to 50 seconds for a job to finish
  jobs list                         the buyer's jobs, newest first
  jobs accept <job>                 accept a delivered job
  jobs send-back <job> <note>       send a job back with a note, and the AI redoes it
  jobs cancel <job>                 cancel a job before delivery
  jobs end <job> <end>              end a job at one of its ends, as that end's by allows
  jobs again <job>                  order an ended job again
  jobs set-policy <job> k=v …       set a job's policy values within their bounds
  jobs signal <job> <signal>        raise one of the Service's inbound signals
  jobs message <job> <text>         say something in the job's thread as the client
  jobs messages <job>               read the job's messages, oldest first
  jobs record <job>                 a job's record as you may read it, oldest first
  subjects list                     the subjects your jobs joined
  subjects get <subject>            read a subject
  clocks list                       the clocks your jobs and their subjects run
  clocks get <clock>                read a clock
  clocks ack <clock>                acknowledge a clock you answer for
  clocks satisfy <clock>            close a clock you answer for, on evidence on the record
  clocks choose <clock> <option>    choose one of a clock's lapse options at its date
  subscriptions list                your subscriptions
  subscriptions get <subscription>  read a subscription
  subscriptions cancel <subscription>  cancel a subscription
  asks reissue <ask>                reissue an open ask's link, to hand to its party again
  jobs files list <job>             the files a job holds, each by its sha256
  jobs files put <job> <path>       put a file in a job's documents plane under its own sha256
  jobs files get <job> <sha256>     read a file a job holds, by its sha256

A person: at your line, or a member in their own session
  jobs approve <job>                approve, sign or do a job waiting on a person
  members add <pool> <email> k=v …  join a Pool, email first and resumable
  me availability <availability>    set your availability
  me ledger                         read your conflicts ledger
  me ledger add <name> k=v …        add a party to your conflicts ledger
  me ledger checks                  every check of your conflicts ledger
  me missed                         the open Tasks your own declarations kept from you
  tasks list                        your feed
  tasks get <task>                  read a Task's teaser
  tasks sheet <task>                read a Task's sheet
  tasks pass <task> <reason>        pass on a Task
  tasks claim <task>                claim a Task
  tasks clear <task>                clear a held Task
  tasks packet <task>               read a cleared Task's packet
  tasks release <task>              give a held Task back before it is done
  tasks attest <task> k=v …         attest the Task you claimed and cleared
  tasks send-back <task> <defects>  send the work back with its defects
  tasks decline <task> <memo>       decline the Task, with a reasoned memo only the client reads
  tasks recuse <task>               step aside from a Task you hold, for a conflict
  tasks extend <task>               extend your hold on a Task, once
  tasks contest <task> <reason>     contest a send-back your attested work received
  tasks message <task> <kind> <text>  reach the client through the job's thread, by kind
  me subjects                       the subjects where you are of record
  subjects withdraw <subject> <successor>  withdraw as the member of record, naming your successor

Testing, in the sandbox
  test-clocks create <frozen_at>    make a test clock frozen at a time
  test-clocks advance <clock> <to>  move a test clock to a time, or by a span
  events list                       the brand's events after a seq
  listen [--forward-to <url>]       the brand's events
  watches create <url>              watch events at a URL
  watches list                      the watches this key holds, with their deliveries
  watches delete <watch>            stop a watch
  watches replay <watch>            deliver to a watch again every event it covers after a seq
  events send <type>                send an event in

v2's short names
  order <service> k=v …             order a job: --max <usd>, --key <key>, --approved, --policy k=v, --metadata k=v
  get <job>                         jobs get
  wait <job>                        jobs wait, until it stops working
  accept <job>                      jobs accept
  send-back <job> <note>            jobs send-back
  cancel <job>                      jobs cancel
  approve <job>                     jobs approve
  tick <span> [--to <time>] [--test-clock <tc_>] [--trace] [--compare] [--market <m>]  test-clocks advance: move a clock forward by a span or --to a time; --trace prints owed, fired, order, kind; --compare runs it three ways
  trigger <type>                    events send: fire a synthetic event, or raise a signal

  --json         print the answer as the API sent it; every failure prints the one error shape (or SERVICES_DEV_JSON=1)
  --ai <usd>     what one simulated AI call costs (0.42, an example figure)
  --no-try       dev skips the first job
  --members <n>  dev seeds n simulated members in each Pool, from its join shape; every act they take is labeled simulated
  --market <m>   with --members: tight (the fill ladder climbs), normal, or flush (a Task fills at the first rung)
  SERVICES_DEV_KEY  the key each call sends as Authorization: Bearer; on localhost, none uses the test key
  SERVICES_DEV_SESSION  a member's own session, from members login: the member commands act in it
  --attest <statement>  tasks clear: each statement on the sheet, word for word, once each
  --affirm <item>       jobs approve and tasks attest: each checklist item the person affirms

Exit codes
  0 ok · 1 check failed · 2 usage · 3 invalid request · 4 authentication · 5 blocked: a person must act · 6 conflict or guard · 10 retry: api error, rate limited, nothing running

npx services.dev help --json lists every command with its operation; npx services.dev <command> --help shows one.

$ npx services.dev jobs send-back --help
npx services.dev jobs send-back <job> <note>
  send a job back with a note, and the AI redoes it
  row     job.send_back · POST /jobs/:id/send_back · send_back_job · jobs.sendBack()
  note    What to fix.
  key     Any string you choose: the same key replays the first answer and never acts twice. The Idempotency-Key header does the same.
  exit    0 ok · 2 usage · 3 invalid request · 4 authentication · 5 blocked · 6 conflict · 10 retry
```

## Taking it live

| Command | Does | Who runs it |
|---|---|---|
| `npx services.dev deploy` | deploy the brand to its domain, every surface and app at once | you |
| `npx services.dev preview` | deploy the change to a preview address, on test keys | you |
| `npx services.dev keys` | make the brand's test and live keys, and rotate them | you |
| `npx services.dev logs` | tail the brand's request log, live or test | you |
| `npx services.dev payouts` | read each member's payouts and the Pool's schedule | you |

## Running it live

Every command the Operate tab runs, with its API call and the page that explains it:

| Command | API | Explained in |
|---|---|---|
| `npx services.dev deploy` | `POST https://services.dev/v1/deploys` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-to-test) |
| `npx services.dev deploy --live [--breaking]` | `POST https://services.dev/v1/deploys/:version/live` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `npx services.dev deploy --live --stages <shares> --hold <span>` | `POST https://services.dev/v1/deploys/:version/live { stages, hold }` | [Deploy](https://services.dev/docs/operate/deploy.md#live-in-stages) |
| `npx services.dev deploy --live --break-freeze --reason <why>` | `POST https://services.dev/v1/deploys/:version/live { break_freeze }` | [Deploy](https://services.dev/docs/operate/deploy.md#freeze-the-dates-that-matter) |
| `npx services.dev connect stripe` | `POST https://services.dev/v1/stripe/connect` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `npx services.dev model set <key>` | `PUT https://services.dev/v1/model` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `npx services.dev domains` | `GET https://services.dev/v1/domains` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `npx services.dev test-clocks create <time> [--members N --market tight]` | `POST /test_clocks` | [Test and live](https://services.dev/docs/operate/testing.md#run-a-season-before-it-starts) |
| `npx services.dev subscriptions seed <service> --count N --test-clock <tc>` | `POST /test_clocks/:id/seed` | [Test and live](https://services.dev/docs/operate/testing.md#run-a-season-before-it-starts) |
| `npx services.dev tick <time> --test-clock <tc>` | `POST /test_clocks/:id/advance` | [Timers and replay](https://services.dev/docs/service/timers.md#on-a-test-clock) |
| `npx services.dev verify --test-clock <tc>` | `GET /verify/suite.json` | [Test and live](https://services.dev/docs/operate/testing.md#run-a-season-before-it-starts) |
| `npx services.dev dev [--port 8787]` | none: it serves your folder on localhost | [Test and live](https://services.dev/docs/operate/testing.md#what-each-mode-does) |
| `npx services.dev preview` | `POST https://services.dev/v1/previews` | [Test and live](https://services.dev/docs/operate/testing.md#where-each-mode-serves) |
| `npx services.dev deploy --region <region>` | `POST https://services.dev/v1/deploys { region }` | [Test and live](https://services.dev/docs/operate/testing.md#where-each-mode-serves) |
| `npx services.dev check --against live` | `POST https://services.dev/v1/deploys { dry_run: true }` | [Versions](https://services.dev/docs/operate/versions.md#what-counts-as-breaking) |
| `npx services.dev jobs repin --from <version> --to <version> [--dry-run]` | `POST /owner/versions/:from/repin { to, dry_run }` | [Versions](https://services.dev/docs/operate/versions.md#moving-jobs-in-flight) |
| `npx services.dev jobs repin <job> --to <version>` | `POST /owner/jobs/:id/repin { to }` | [Versions](https://services.dev/docs/operate/versions.md#moving-jobs-in-flight) |
| `npx services.dev rollback <version> [--dry-run] [--breaking]` | `POST https://services.dev/v1/deploys/:version/live { rollback: true, dry_run }` | [Versions](https://services.dev/docs/operate/versions.md#rolling-back) |
| `npx services.dev versions` | `GET /versions?pinned=true` | [Versions](https://services.dev/docs/operate/versions.md#rolling-back) |
| `npx services.dev jobs trace <job>` | `GET /owner/jobs/:id/trace` | [Observe](https://services.dev/docs/operate/observe.md#a-jobs-trace) |
| `npx services.dev jobs ledger <job>` | `GET /owner/jobs/:id` | [Observe](https://services.dev/docs/operate/observe.md#the-jobs-money) |
| `npx services.dev spend --by service\|step\|model --since <date>` | `GET /owner/spend` | [Observe](https://services.dev/docs/operate/observe.md#ai-spend) |
| `npx services.dev logs` | `GET /owner/logs` | [Observe](https://services.dev/docs/operate/observe.md#on-the-console) |
| `npx services.dev listen` | `GET /events/stream` | [Observe](https://services.dev/docs/operate/observe.md#on-the-console) |
| `npx services.dev audit --since <date> [--who agent]` | `GET /owner/audit` | [Observe](https://services.dev/docs/operate/observe.md#the-audit-log) |
| `npx services.dev console [--since 90d]` | `GET /owner/console` | [Run your Service](https://services.dev/docs/operate.md#the-quarter-on-one-line) |
| `npx services.dev quality <service>` | `GET /owner/quality?service=` | [Quality](https://services.dev/docs/operate/quality.md#two-review-patterns-each-with-its-own-numbers) |
| `npx services.dev evals create <service> --label <label>` | `POST /owner/evals` | [Quality](https://services.dev/docs/operate/quality.md#score-a-change-before-it-ships) |
| `npx services.dev evals run <evl> --against <version>` | `POST /owner/evals/:id/runs` | [Quality](https://services.dev/docs/operate/quality.md#score-a-change-before-it-ships) |
| `npx services.dev line <service> [--all] [--by <field>]` | `GET /owner/line?service=` | [Move a step to AI](https://services.dev/docs/operate/line.md#the-lines-that-are-ready) |
| `npx services.dev line apply <service>` | `POST /owner/line/:service/apply` | [Move a step to AI](https://services.dev/docs/operate/line.md#the-lines-that-are-ready) |
| `npx services.dev pools health <pool> --since 7d` | `GET /pools/:name/health` | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `npx services.dev pools standby <pool> --role <role> --in <region> --season <from>..<to>` | `POST /owner/pools/:name/standby` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `npx services.dev pools raise <pool> --role <role> --in <region> --sooner` | `POST /owner/pools/:name/raise` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `npx services.dev pools invite <pool> --role <role> --in <region>` | `POST /owner/pools/:name/invites` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `npx services.dev pools widen <pool> --role <role> --to <region>` | `POST /owner/pools/:name/widen` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `npx services.dev clocks assign <clock> <member>` | `POST /owner/clocks/:id/assign` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `npx services.dev clocks satisfy <clock>` | `POST /clocks/:id/satisfy` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `npx services.dev clocks choose <clock> <option>` | `POST /clocks/:id/choose` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `npx services.dev clocks ack <clock>` | `POST /clocks/:id/ack` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `npx services.dev hold <service>.<step> [--where <filter>]` | `POST /owner/holds { at, where }` | [Incidents](https://services.dev/docs/operate/incidents.md#the-four-controls) |
| `npx services.dev hold <service>.<step> --to <role> [--pay <usd>]` | `POST /owner/holds { at, to, pay }` | [Incidents](https://services.dev/docs/operate/incidents.md#the-four-controls) |
| `npx services.dev hold <service> --drain` | `POST /owner/holds { at, drain: true }` | [Incidents](https://services.dev/docs/operate/incidents.md#drain-or-stop-everything) |
| `npx services.dev holds` | `GET /owner/holds` | [Incidents](https://services.dev/docs/operate/incidents.md#a-model-that-changed-overnight) |
| `npx services.dev jobs affected --where <filter> --since <time>` | `GET /owner/jobs?decision.model_build=&since=` | [Incidents](https://services.dev/docs/operate/incidents.md#what-it-already-touched) |
| `npx services.dev jobs send-back --affected <filter> --from <step>` | `POST /owner/jobs/send-back { where, from }` | [Incidents](https://services.dev/docs/operate/incidents.md#what-it-already-touched) |
| `npx services.dev hold lift <hld> [--dry-run] [--repin-to <version>]` | `POST /owner/holds/:id/lift { repin_to, dry_run }` | [Incidents](https://services.dev/docs/operate/incidents.md#lift-it-without-going-back) |
| `npx services.dev incidents get <inc>` | `GET /owner/incidents/:id` | [Incidents](https://services.dev/docs/operate/incidents.md#after-it) |
| `npx services.dev incidents report <inc>` | `GET /owner/incidents/:id/report` | [Incidents](https://services.dev/docs/operate/incidents.md#after-it) |
| `npx services.dev stop --live [--except <step>] [--to <role>]` | `POST /owner/stop { except, to }` | [Incidents](https://services.dev/docs/operate/incidents.md#drain-or-stop-everything) |
| `npx services.dev start --live` | `POST /owner/start` | [Incidents](https://services.dev/docs/operate/incidents.md#drain-or-stop-everything) |
| `npx services.dev keys rotate --all --live` | `POST /owner/keys/rotate { all: true }` | [Incidents](https://services.dev/docs/operate/incidents.md#which-control-for-which-cause) |
| `npx services.dev jobs send-back <job> <note> --from <step>` | `POST /jobs/:id/send_back` | [Support](https://services.dev/docs/operate/support.md#a-redo) |
| `npx services.dev jobs refund <job> [--usd] --reason <why>` | `POST /owner/jobs/:id/refund` | [Support](https://services.dev/docs/operate/support.md#a-refund-on-two-sellers) |
| `npx services.dev disputes get <dsp>` | `GET /owner/disputes/:id` | [Support](https://services.dev/docs/operate/support.md#a-dispute) |
| `npx services.dev disputes submit <dsp>` | `POST /owner/disputes/:id/submit` | [Support](https://services.dev/docs/operate/support.md#a-dispute) |
| `npx services.dev tasks rule <task> upheld\|overturned` | `POST /owner/tasks/:id/rule` | [Support](https://services.dev/docs/operate/support.md#the-queue) |
| `npx services.dev limits` | `GET /owner/limits` | [Limits](https://services.dev/docs/operate/limits.md#where-you-stand) |
| `npx services.dev plan upgrade <plan>` | `POST https://services.dev/v1/plan` | [Limits](https://services.dev/docs/operate/limits.md#at-a-plan-limit) |

---

- Up: [Your first paid job](https://services.dev/docs.md)
- Previous: [word_collision](https://services.dev/docs/reference/check/word_collision.md)
- Next: [Magic values](https://services.dev/docs/reference/magic-values.md)
