---
title: "Events"
url: https://services.dev/docs/reference/events
---
# Events

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

> Every event in a brand’s feed, who may read it, what it says and the operations that emit it.

93 events. Each arrives as an [`event`](https://services.dev/docs/reference/objects.md#event) object, in the brand's ordered feed, to the audiences its row names. [Your events](https://services.dev/docs/api/events.md) covers reading the feed, the stream and watches.

| Event | Audience | What it says | Emitted by | Explained in |
|---|---|---|---|---|
| <a id="job.ordered" />`job.ordered` | buyer, owner | A buyer, or another of your Services, ordered the job at its pinned price, with their metadata. | [`service.order`](https://services.dev/docs/reference/operations.md#serviceorder), [`job.again`](https://services.dev/docs/reference/operations.md#jobagain) | [Your events](https://services.dev/docs/api/events.md), [Refusals and cures](https://services.dev/docs/people/refusals.md), [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="step.proposed" />`step.proposed` | owner | A doer proposed a step's output: its hash, before the gate. | [`job.approve`](https://services.dev/docs/reference/operations.md#jobapprove), [`task.attest`](https://services.dev/docs/reference/operations.md#taskattest), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | — |
| <a id="step.committed" />`step.committed` | buyer, owner | The gate committed a step: the doer, the output hash, its files with sha256, its cite, and where its next sent the job. The buyer sees its stage. | [`job.approve`](https://services.dev/docs/reference/operations.md#jobapprove), [`task.attest`](https://services.dev/docs/reference/operations.md#taskattest), [`clock.choose`](https://services.dev/docs/reference/operations.md#clockchoose), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | [Propose, then the gate commits](https://services.dev/docs/service/gate.md), [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="step.refused" />`step.refused` | owner | The gate refused a proposal, with the code and why. The doer's work stays open: the AI redoes it, and a person's step stays theirs. | [`job.approve`](https://services.dev/docs/reference/operations.md#jobapprove), [`task.attest`](https://services.dev/docs/reference/operations.md#taskattest), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | [deliver](https://services.dev/docs/service/deliver.md), [Propose, then the gate commits](https://services.dev/docs/service/gate.md), [Guards](https://services.dev/docs/service/guards.md) |
| <a id="step.skipped" />`step.skipped` | buyer, owner | A step's when said no, so it never ran. | the work, or a clock | — |
| <a id="review.done" />`review.done` | owner | A review finished a round: its kind, lenses, round, verdict, and `review/<step>.json` with the findings and signals. | the work, or a clock | [AI steps and briefs](https://services.dev/docs/service/ai.md), [deliver](https://services.dev/docs/service/deliver.md), [Review steps](https://services.dev/docs/service/review.md) |
| <a id="decision.made" />`decision.made` | owner | One AI call: the model it was pinned to, the hashes of what it read, and the brief and its version. | the work, or a clock | [AI steps and briefs](https://services.dev/docs/service/ai.md) |
| <a id="job.paused" />`job.paused` | buyer, member, owner | The work paused on a person: an approval, a signature or their step; or on a party's ask, its clock paused. | [`task.clear`](https://services.dev/docs/reference/operations.md#taskclear), [`task.release`](https://services.dev/docs/reference/operations.md#taskrelease), [`task.decline`](https://services.dev/docs/reference/operations.md#taskdecline), [`task.recuse`](https://services.dev/docs/reference/operations.md#taskrecuse), [`task.message`](https://services.dev/docs/reference/operations.md#taskmessage) | [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="job.delivered" />`job.delivered` | buyer, owner | The output is ready for the buyer. | the work, or a clock | [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="job.sent_back" />`job.sent_back` | buyer, owner | The buyer, the person at the line, or a member with the defects, sent the work back: to the step a member names, or the one before. | [`job.send_back`](https://services.dev/docs/reference/operations.md#jobsend_back), [`task.send_back`](https://services.dev/docs/reference/operations.md#tasksend_back) | [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="job.accepted" />`job.accepted` | buyer, owner | The buyer accepted, or 7 days passed after delivery. Final. | [`job.accept`](https://services.dev/docs/reference/operations.md#jobaccept), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="job.canceled" />`job.canceled` | buyer, owner | The job stopped: the buyer canceled, the AI cap ran out, or a step failed. The buyer pays $0. | [`job.send_back`](https://services.dev/docs/reference/operations.md#jobsend_back), [`job.cancel`](https://services.dev/docs/reference/operations.md#jobcancel), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="job.ended" />`job.ended` | buyer, owner | The job reached an end: lapsed, or one the Service declared, with what it owes there. An end is forever. | [`job.end`](https://services.dev/docs/reference/operations.md#jobend), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [How a job ends](https://services.dev/docs/service/ends.md), [Intake and request lists](https://services.dev/docs/service/intake.md), [The job lifecycle](https://services.dev/docs/service/lifecycle.md) |
| <a id="job.at_risk" />`job.at_risk` | buyer, owner | Three-quarters of the job's within has gone while the work was the brand's, and a step that escalates at risk goes to its role. A wait on a party, an outside system or the client's direction never counts. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Dates at risk](https://services.dev/docs/operate/dates.md), [Deadlines](https://services.dev/docs/service/within.md) |
| <a id="job.late" />`job.late` | buyer, owner | The job's within has gone while the work was the brand's: it is late. With `price.late`, the charge falls by it, and a step that escalates when late goes to its role. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Dates at risk](https://services.dev/docs/operate/dates.md), [Deadlines](https://services.dev/docs/service/within.md) |
| <a id="policy.set" />`policy.set` | buyer, owner | The buyer, or the brand's console, changed policy values within their bounds. | [`job.policy`](https://services.dev/docs/reference/operations.md#jobpolicy) | [What the buyer sets, and what only the client sets](https://services.dev/docs/service/policy.md) |
| <a id="signal.raised" />`signal.raised` | buyer, owner | A named fact was raised: a predicate turned true, a silence ran its span, or an inbound call. Its goto moved the job. | [`job.signal`](https://services.dev/docs/reference/operations.md#jobsignal), [`task.message`](https://services.dev/docs/reference/operations.md#taskmessage), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance), [`event.inbound`](https://services.dev/docs/reference/operations.md#eventinbound) | [The job lifecycle](https://services.dev/docs/service/lifecycle.md), [Signals](https://services.dev/docs/service/signals.md) |
| <a id="outcome.reported" />`outcome.reported` | buyer, owner | Your code reported what the job won, for a share. | the work, or a clock | [Outcomes](https://services.dev/docs/money/outcomes.md) |
| <a id="outcome.verified" />`outcome.verified` | buyer, member, owner | The outcome's proof confirmed its amount: a payment, a signature, the counterparty or a receipt. The share is charged and held, with any share pay, until outcome.window closes. | the work, or a clock | [Outcomes](https://services.dev/docs/money/outcomes.md) |
| <a id="outcome.final" />`outcome.final` | buyer, member, owner | The outcome's window closed: the share and the take on it are final, and held share pay accrues to the member. | the work, or a clock | [Outcomes](https://services.dev/docs/money/outcomes.md) |
| <a id="outcome.reversed" />`outcome.reversed` | buyer, member, owner | The money behind the outcome went back inside its window: the share, held share pay and the take reverse, and flat pay stands. | the work, or a clock | [Outcomes](https://services.dev/docs/money/outcomes.md) |
| <a id="charge.held" />`charge.held` | buyer, owner | The buyer key holds the price, or the buyer's max for a share. | [`service.order`](https://services.dev/docs/reference/operations.md#serviceorder), [`job.again`](https://services.dev/docs/reference/operations.md#jobagain) | [Release](https://services.dev/docs/money/release.md) |
| <a id="charge.collected" />`charge.collected` | buyer, owner | The buyer was charged: at delivery, or at outcome for a share. | [`job.end`](https://services.dev/docs/reference/operations.md#jobend), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | [Release](https://services.dev/docs/money/release.md) |
| <a id="charge.earned" />`charge.earned` | buyer, owner | The charges are final. | [`job.accept`](https://services.dev/docs/reference/operations.md#jobaccept), [`job.end`](https://services.dev/docs/reference/operations.md#jobend), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Release](https://services.dev/docs/money/release.md) |
| <a id="charge.released" />`charge.released` | buyer, owner | A share's unused hold went back to the buyer key. | [`job.accept`](https://services.dev/docs/reference/operations.md#jobaccept), [`job.end`](https://services.dev/docs/reference/operations.md#jobend), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Release](https://services.dev/docs/money/release.md) |
| <a id="charge.voided" />`charge.voided` | buyer, owner | A stopped job dropped its hold. | [`job.send_back`](https://services.dev/docs/reference/operations.md#jobsend_back), [`job.cancel`](https://services.dev/docs/reference/operations.md#jobcancel), [`job.end`](https://services.dev/docs/reference/operations.md#jobend), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Release](https://services.dev/docs/money/release.md) |
| <a id="charge.refunded" />`charge.refunded` | buyer, owner | A stopped job gave back what it had charged, or an end gave back what it no longer owes. | [`job.send_back`](https://services.dev/docs/reference/operations.md#jobsend_back), [`job.cancel`](https://services.dev/docs/reference/operations.md#jobcancel), [`job.end`](https://services.dev/docs/reference/operations.md#jobend) | [Refunds and disputes](https://services.dev/docs/money/refunds-and-disputes.md) |
| <a id="dispute.opened" />`dispute.opened` | owner | A bank opened a dispute on a charge: the amount and the fee are held on the seller's account, and the evidence from the record is ready, with its due date. | Stripe, on the seller's account | [Refunds and disputes](https://services.dev/docs/money/refunds-and-disputes.md) |
| <a id="dispute.closed" />`dispute.closed` | owner | The bank ruled on a dispute: won returns the amount and the fee to the seller's account, lost keeps them out. Accrued pay stands either way. | Stripe, on the seller's account | [Refunds and disputes](https://services.dev/docs/money/refunds-and-disputes.md) |
| <a id="submission.sent" />`submission.sent` | buyer, owner | A submit step sent one submission past the gate: its rcp_ receipt, transmitted, filed at the first submission's time for a repair inside perfect. | the work, or a clock | [deliver](https://services.dev/docs/service/deliver.md), [One submission per element](https://services.dev/docs/service/each.md), [Sending to outside systems](https://services.dev/docs/service/submit.md) |
| <a id="receipt.accepted" />`receipt.accepted` | buyer, owner | The outside system accepted a submission, with or without alerts. Once every one of the step's is accepted, a `<step>.accepted` charge releases. | [`receipt.answer`](https://services.dev/docs/reference/operations.md#receiptanswer) | [deliver](https://services.dev/docs/service/deliver.md), [One submission per element](https://services.dev/docs/service/each.md), [Sending to outside systems](https://services.dev/docs/service/submit.md) |
| <a id="receipt.rejected" />`receipt.rejected` | buyer, owner | The outside system rejected a submission, with its codes. A transition, never an error: the job goes to the repair the codes name, or after two rejections to the fallback. | [`receipt.answer`](https://services.dev/docs/reference/operations.md#receiptanswer) | [deliver](https://services.dev/docs/service/deliver.md), [One submission per element](https://services.dev/docs/service/each.md), [Sending to outside systems](https://services.dev/docs/service/submit.md) |
| <a id="receipt.timed_out" />`receipt.timed_out` | buyer, owner | The outside system stayed silent past the step's wait: the job went to its fallback. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [deliver](https://services.dev/docs/service/deliver.md), [One submission per element](https://services.dev/docs/service/each.md), [The job lifecycle](https://services.dev/docs/service/lifecycle.md), [Sending to outside systems](https://services.dev/docs/service/submit.md) |
| <a id="ask.opened" />`ask.opened` | buyer, owner | An ask step asked a party to act: the ask, its party, its expiry, its request list, and for a sign the output hash it binds. | [`job.approve`](https://services.dev/docs/reference/operations.md#jobapprove), [`task.decline`](https://services.dev/docs/reference/operations.md#taskdecline), [`task.message`](https://services.dev/docs/reference/operations.md#taskmessage), [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="item.done" />`item.done` | buyer, owner | One item of an ask's request list came in: answered, waived with a reason, or substituted. | [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="ask.reminded" />`ask.reminded` | buyer, owner | The party was reminded, before the ask's link expires. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="ask.done" />`ask.done` | buyer, owner | The party acted, or declined: through their link, or as a delegated agent for an answer or an upload. A decide records its choice. | [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | [Your events](https://services.dev/docs/api/events.md), ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="ask.expired" />`ask.expired` | buyer, owner | The ask's link expired. It opens once more; a second expiry lapses the job. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="ask.voided" />`ask.voided` | buyer, owner | The ask was voided: another party acted, the job ended, or what was signed changed past its tolerance (signature_void), and a new ask opened. | [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="ask.relinked" />`ask.relinked` | buyer, owner | The ask's link was reissued; the old one stopped working. | [`ask.reissue`](https://services.dev/docs/reference/operations.md#askreissue) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="grant.given" />`grant.given` | buyer, owner | The party gave a grant through their own link: the acts it permits, and until when it is live. A step that needs it can run. | [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | [Grants and decisions](https://services.dev/docs/service/grants.md) |
| <a id="grant.expired" />`grant.expired` | buyer, owner | A grant ran out at its until. A step that needs it is refused needs_grant, and the party is asked to grant it again. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Grants and decisions](https://services.dev/docs/service/grants.md) |
| <a id="grant.revoked" />`grant.revoked` | buyer, owner | The party revoked their grant through their own link: it stopped being live at once. A step that needs it is refused needs_grant from then on. | [`ask.revoke`](https://services.dev/docs/reference/operations.md#askrevoke) | [Grants and decisions](https://services.dev/docs/service/grants.md) |
| <a id="member.applied" />`member.applied` | owner | An application to a Pool is complete: the member, the Pool and every answer, for the Pool's verifier, which writes back only what it checks. It goes to the Pool's verify URL, signed and retried; on localhost it lands in the owner's feed and the fixture verifier answers. | [`member.join`](https://services.dev/docs/reference/operations.md#memberjoin) | [Verify a member](https://services.dev/docs/people/pool/verify.md) |
| <a id="task.posted" />`task.posted` | member, owner | A role step posted a Task at its fee, fixed now and never lowered, to its dispatch: or to the one member a client's direct named. Its reach says who it can be offered to. | the work, or a clock | [When no one claims](https://services.dev/docs/people/pool/fill.md), [Pool(): your marketplace](https://services.dev/docs/people/pool.md), [Tasks: offered, never assigned](https://services.dev/docs/people/pool/tasks.md) |
| <a id="task.unreached" />`task.unreached` | owner | A Task posted that no member reaches: eligible, but every one is outside what they declared, or no one is eligible. The owner console alarms; the ladder climbs on. | the work, or a clock | [When no one claims](https://services.dev/docs/people/pool/fill.md), [Pool(): your marketplace](https://services.dev/docs/people/pool.md) |
| <a id="task.offered" />`task.offered` | member, owner | A Task was offered to a member, by its dispatch (`feed` or `cascade`), first refusal or the owner: its teaser, with its minutes, rate and due date, and never a party name. | [`task.pass`](https://services.dev/docs/reference/operations.md#taskpass), [`task.clear`](https://services.dev/docs/reference/operations.md#taskclear), [`task.release`](https://services.dev/docs/reference/operations.md#taskrelease), [`task.offer`](https://services.dev/docs/reference/operations.md#taskoffer), [`task.recuse`](https://services.dev/docs/reference/operations.md#taskrecuse) | [Pool(): your marketplace](https://services.dev/docs/people/pool.md), [Tasks: offered, never assigned](https://services.dev/docs/people/pool/tasks.md) |
| <a id="task.claimed" />`task.claimed` | member, owner | A member claimed a Task: it is held for them, gone from every other feed, until they clear it or the hold runs out. | [`task.claim`](https://services.dev/docs/reference/operations.md#taskclaim) | [Pool(): your marketplace](https://services.dev/docs/people/pool.md), [Tasks: offered, never assigned](https://services.dev/docs/people/pool/tasks.md) |
| <a id="task.hold_expiring" />`task.hold_expiring` | member, owner | Three-quarters of a member's hold on a Task has run: it reopens at held_until unless they finish, or extend it once. | the work, or a clock | [Pool(): your marketplace](https://services.dev/docs/people/pool.md), [Tasks: offered, never assigned](https://services.dev/docs/people/pool/tasks.md) |
| <a id="task.extended" />`task.extended` | member, owner | The member extended their hold, once: by as long again as it first held, never past the due date. | [`task.extend`](https://services.dev/docs/reference/operations.md#taskextend) | [Pool(): your marketplace](https://services.dev/docs/people/pool.md), [Tasks: offered, never assigned](https://services.dev/docs/people/pool/tasks.md) |
| <a id="task.due_moved" />`task.due_moved` | member, owner | A quorum of the members who read a Task's sheet passed on its timing: its due date moved a day. | the work, or a clock | [When no one claims](https://services.dev/docs/people/pool/fill.md), [Pool(): your marketplace](https://services.dev/docs/people/pool.md) |
| <a id="task.raised" />`task.raised` | member, owner | The fill ladder raised a Task no one claimed: a share of the posted fee, up to its cap, and who funds it. A fee is never lowered. | the work, or a clock | [When no one claims](https://services.dev/docs/people/pool/fill.md) |
| <a id="task.widened" />`task.widened` | member, owner | The fill ladder opened a Task no one claimed to the next tier down that is still eligible, or to staff who hold its credential. | the work, or a clock | [When no one claims](https://services.dev/docs/people/pool/fill.md) |
| <a id="task.declined" />`task.declined` | member, owner | The member declined, with a memo only the client reads: paid, never scored. The job waits on the client's direction. | [`task.decline`](https://services.dev/docs/reference/operations.md#taskdecline) | [Declines and direction](https://services.dev/docs/people/direction.md) |
| <a id="task.recused" />`task.recused` | member, owner | The member stepped aside for a conflict: nothing accrues and nothing is scored, the Task reopens at once, and they are screened from every Task on the subject. The client reads that a professional stepped aside. | [`task.recuse`](https://services.dev/docs/reference/operations.md#taskrecuse) | [Pool(): your marketplace](https://services.dev/docs/people/pool.md) |
| <a id="task.contested" />`task.contested` | member, owner | The member contested a send-back their attested work received, with a reason, for the owner or a staff role to rule on. | [`task.contest`](https://services.dev/docs/reference/operations.md#taskcontest) | [Pool(): your marketplace](https://services.dev/docs/people/pool.md) |
| <a id="task.ruled" />`task.ruled` | member, owner | A contest was ruled: the send-back upheld or overturned, by a credentialed peer when a rules row reserves the act, or by the owner or a staff role. `by` says which. | [`task.contest`](https://services.dev/docs/reference/operations.md#taskcontest) | [Track records](https://services.dev/docs/people/pool/track.md#contests), [What a person can do](https://services.dev/docs/people/acts.md) |
| <a id="thread.posted" />`thread.posted` | buyer, owner | A post in the job's thread: the client's message, a member's question, note or flag, the party's reply, or a member's memo on advice they declined. | [`job.message`](https://services.dev/docs/reference/operations.md#jobmessage), [`task.message`](https://services.dev/docs/reference/operations.md#taskmessage) | [Talk](https://services.dev/docs/service/talk.md) |
| <a id="message.sent" />`message.sent` | buyer, owner | An answer went out in the thread: the AI's, at once, or held advice once a member adopted it, under their name, credential and region. | [`job.message`](https://services.dev/docs/reference/operations.md#jobmessage), [`task.attest`](https://services.dev/docs/reference/operations.md#taskattest) | [Talk](https://services.dev/docs/service/talk.md) |
| <a id="message.held" />`message.held` | owner | The AI's answer fell in an advice class a rules row reserves: held as a proposal and posted as a Task to the adopt role. The client reads that a professional is reviewing it. | [`job.message`](https://services.dev/docs/reference/operations.md#jobmessage) | [Talk](https://services.dev/docs/service/talk.md) |
| <a id="message.adopted" />`message.adopted` | member, owner | A member adopted held advice, as written or edited: their name, credential, region, the hash and the rules version, frozen on the record. | [`task.attest`](https://services.dev/docs/reference/operations.md#taskattest) | [Talk](https://services.dev/docs/service/talk.md) |
| <a id="tier.changed" />`tier.changed` | member, owner | The member's tier changed, with the rule that moved them. | the work, or a clock | — |
| <a id="pay.accrued" />`pay.accrued` | member, owner | A member's pay for a paid act accrued, at the Task's fee as it stood, with the raise the brand funds; or a kill share, a referral, a retainer or a ruling. Nothing claws it back except a recorded finding of bad faith. | [`task.attest`](https://services.dev/docs/reference/operations.md#taskattest), [`task.send_back`](https://services.dev/docs/reference/operations.md#tasksend_back), [`task.decline`](https://services.dev/docs/reference/operations.md#taskdecline) | [Pay](https://services.dev/docs/people/pool/pay.md) |
| <a id="pay.payable" />`pay.payable` | member, owner | An accrued pay became payable, `after` the act, two days unless the Pool sets it, and joins the member's next payout. | the work, or a clock | [Pay](https://services.dev/docs/people/pool/pay.md) |
| <a id="pay.paid" />`pay.paid` | member, owner | A payout moved payable pay to the member's payout account, on the Pool's schedule: one payout, with a line per brand. | the work, or a clock | [Pay](https://services.dev/docs/people/pool/pay.md) |
| <a id="consent.given" />`consent.given` | buyer, owner | The client consented to what a Pool's sheet shows the members who read it, and to whom, before the first Task posted: through their own link. | [`ask.complete`](https://services.dev/docs/reference/operations.md#askcomplete) | ['Asks: a ceremony without an account'](https://services.dev/docs/service/ask.md), [deliver](https://services.dev/docs/service/deliver.md), [Intake and request lists](https://services.dev/docs/service/intake.md) |
| <a id="succession.started" />`succession.started` | member, owner | The member of record began to withdraw, naming a successor: the seat stays theirs until the successor clears conflicts and accepts it. | the work, or a clock | [Subjects](https://services.dev/docs/service/subject.md) |
| <a id="succession.accepted" />`succession.accepted` | member, owner | The successor cleared conflicts against the subject's parties and accepted the seat: they are of record from now on. | the work, or a clock | [Subjects](https://services.dev/docs/service/subject.md) |
| <a id="clock.opened" />`clock.opened` | buyer, owner | A clock opened: its name, the Service, where it lives, its date resolved on the calendar (due, due_on, zone) and a hash of its spec. Every later change to it is an event, so the record alone rebuilds it. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.unopened" />`clock.unopened` | owner | The Service's own code couldn't give a clock's date: its due function threw, or returned something that isn't a date. Recorded once, with why; the owner console alarms until it opens. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.noticed" />`clock.noticed` | buyer, owner | A clock's notice rung: its owner is told the date is coming. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.escalated" />`clock.escalated` | buyer, owner | A clock's escalate rung: the date is close, and the owner console hears of it beside the owner. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Dates at risk](https://services.dev/docs/operate/dates.md), [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.ack_due" />`clock.ack_due` | buyer, owner | Inside an ack daily rung's window, the day's acknowledgement is due from the clock's owner. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.ack_missed" />`clock.ack_missed` | buyer, owner | The day passed with no acknowledgement from the owner: recorded, and the next day's is due. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Dates at risk](https://services.dev/docs/operate/dates.md), [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.ran" />`clock.ran` | buyer, owner | A clock's run rung sent the job to its routed step, which proposes through the gate like any other. One that can't send, or that the gate refuses, is held (held names why): it escalates at once, stays armed, and proposes again. With no live work, the rung is recorded and nothing runs. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.moved" />`clock.moved` | buyer, owner | A step the clock's moves names committed: its date moved, from and to. Every other clock stays where it was. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.due" />`clock.due` | buyer, owner | The date came with the clock unsatisfied: it waits on its owner's choice of the lapse options. Nothing lapses silently. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.barred" />`clock.barred` | buyer, owner | A hard date passed unsatisfied: from here on the gate refuses the steps it bars, with `date_passed`, and its owner chooses among the lapse options. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md#a-date-nothing-moves) |
| <a id="clock.satisfied" />`clock.satisfied` | buyer, owner | The clock closed on evidence on the record: the step it is named for committed, or its owner sent the evidence, a file or a receipt the job holds. | [`clock.satisfy`](https://services.dev/docs/reference/operations.md#clocksatisfy), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.rolled" />`clock.rolled` | buyer, owner | The calendar rolled a clock's date past a weekend or a closed day: from, to, and why. | [`clock.satisfy`](https://services.dev/docs/reference/operations.md#clocksatisfy), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.recurred" />`clock.recurred` | buyer, owner | A recurring clock was satisfied, and its every brought its next occurrence: its date, counted from the first so it never drifts, with its rungs. | [`clock.satisfy`](https://services.dev/docs/reference/operations.md#clocksatisfy), [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.vacant" />`clock.vacant` | owner | No one answers for a running clock, such as one owned by a vacant seat of record: its owner is null, and the owner console alarms. | [`test_clock.advance`](https://services.dev/docs/reference/operations.md#test_clockadvance) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.acked" />`clock.acked` | buyer, owner | The clock's owner acknowledged it: inside an ack daily window, the day's acknowledgement, so the day is never missed; else the rung that last fired. | [`clock.ack`](https://services.dev/docs/reference/operations.md#clockack) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.chosen" />`clock.chosen` | buyer, owner | At the date, the owner chose one of the clock's lapse options, and the clock closed. A step's name sends the job there, through the gate. | [`clock.choose`](https://services.dev/docs/reference/operations.md#clockchoose) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.assigned" />`clock.assigned` | buyer, owner | Someone answers for the clock now: the owner console assigned a member, or the client signed that they own the date. | [`clock.assign`](https://services.dev/docs/reference/operations.md#clockassign) | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="clock.outlived" />`clock.outlived` | buyer, owner | The job ended with the clock still running on its subject. Unless the subject's steward Service keeps it, the client is asked to sign that they own the date. | the work, or a clock | [Clocks](https://services.dev/docs/service/clocks.md) |
| <a id="subscription.created" />`subscription.created` | buyer, owner | An order of a Service whose price has every is a subscription: its first cycle charged, when the cycle ends, and its subject. | the work, or a clock | [Subscriptions and allowances](https://services.dev/docs/money/subscriptions.md), [Schedules and triggers](https://services.dev/docs/service/subscriptions.md) |
| <a id="subscription.renewed" />`subscription.renewed` | buyer, owner | A cycle ended and the next began: charged again, and every allowance reset. | the work, or a clock | [Subscriptions and allowances](https://services.dev/docs/money/subscriptions.md), [Schedules and triggers](https://services.dev/docs/service/subscriptions.md) |
| <a id="subscription.minted" />`subscription.minted` | buyer, owner | A schedule date came or an event arrived: the job it minted, from the subscription with its subject and policy; the extra job offered at its price; or the refusal, such as period_taken, recorded on the subscription. | [`event.inbound`](https://services.dev/docs/reference/operations.md#eventinbound) | [Subscriptions and allowances](https://services.dev/docs/money/subscriptions.md), [Schedules and triggers](https://services.dev/docs/service/subscriptions.md) |
| <a id="allowance.used" />`allowance.used` | buyer, owner | A job inside an allowance: $0 on the job, counted, with how many of the cycle's are used. | [`event.inbound`](https://services.dev/docs/reference/operations.md#eventinbound) | [Subscriptions and allowances](https://services.dev/docs/money/subscriptions.md), [Schedules and triggers](https://services.dev/docs/service/subscriptions.md) |
| <a id="allowance.exceeded" />`allowance.exceeded` | buyer, owner | An order past an allowance: the extra job is offered at its price, 402 OFFER, with the exact next call. | [`event.inbound`](https://services.dev/docs/reference/operations.md#eventinbound) | [Subscriptions and allowances](https://services.dev/docs/money/subscriptions.md), [Schedules and triggers](https://services.dev/docs/service/subscriptions.md) |
| <a id="subscription.canceled" />`subscription.canceled` | buyer, owner | The subscription was canceled: it runs to the end of the cycle paid for, never renews, and nothing mints after. | [`subscription.cancel`](https://services.dev/docs/reference/operations.md#subscriptioncancel) | [Subscriptions and allowances](https://services.dev/docs/money/subscriptions.md), [Schedules and triggers](https://services.dev/docs/service/subscriptions.md) |
| <a id="board.updated" />`board.updated` | public, owner | A Pool's demand board changed: its aggregates, never a job. | the work, or a clock | — |

## Running a Service

What the owner's controls and alarms write:

| Event | Written by | Explained in |
|---|---|---|
| `version.deployed` | `deploy`, `deploy --region <region>` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-to-test) |
| `version.tested` | `deploy`, `preview` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-to-test) |
| `version.failed` | `deploy` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-to-test) |
| `version.live` | `deploy --live`, `deploy --live --break-freeze --reason <why>` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `version.staged` | `deploy --live --stages <shares> --hold <span>` | [Deploy](https://services.dev/docs/operate/deploy.md#live-in-stages) |
| `version.promoted` | `deploy --live --stages <shares> --hold <span>` | [Deploy](https://services.dev/docs/operate/deploy.md#live-in-stages) |
| `version.aborted` | `deploy --live --stages <shares> --hold <span>` | [Deploy](https://services.dev/docs/operate/deploy.md#live-in-stages) |
| `stripe.connected` | `connect stripe` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `model.set` | `model set <key>` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `domain.verified` | `domains` | [Deploy](https://services.dev/docs/operate/deploy.md#deploy-live) |
| `test_clock.created` | `test-clocks create <time>` | [Test and live](https://services.dev/docs/operate/testing.md#run-a-season-before-it-starts) |
| `subscription.created` | `subscriptions seed <service> --count N --test-clock <tc>` | [Test and live](https://services.dev/docs/operate/testing.md#run-a-season-before-it-starts) |
| `test_clock.ready` | `tick <time> --test-clock <tc>` | [Timers and replay](https://services.dev/docs/service/timers.md#on-a-test-clock) |
| `job.repinned` | `jobs repin --from <version> --to <version>`, `jobs repin <job> --to <version>`, `hold lift <hld>` | [Versions](https://services.dev/docs/operate/versions.md#moving-jobs-in-flight) |
| `version.rolled_back` | `rollback <version>` | [Versions](https://services.dev/docs/operate/versions.md#rolling-back) |
| `spend.alarm` | `spend --by service\|step\|model --since <date>` | [Observe](https://services.dev/docs/operate/observe.md#ai-spend) |
| `ai.exhausted` | `spend --by service\|step\|model --since <date>` | [Observe](https://services.dev/docs/operate/observe.md#ai-spend) |
| `review.done` | `quality <service>` | [Quality](https://services.dev/docs/operate/quality.md#two-review-patterns-each-with-its-own-numbers) |
| `eval.created` | `evals create <service> --label <label>` | [Quality](https://services.dev/docs/operate/quality.md#score-a-change-before-it-ships) |
| `eval.finished` | `evals run <evl> --against <version>` | [Quality](https://services.dev/docs/operate/quality.md#score-a-change-before-it-ships) |
| `line.ready` | `line <service>` | [Move a step to AI](https://services.dev/docs/operate/line.md#the-lines-that-are-ready) |
| `line.moved` | `line apply <service>` | [Move a step to AI](https://services.dev/docs/operate/line.md#the-lines-that-are-ready) |
| `pool.alarm` | `pools health <pool> --since 7d` | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `standby.offered` | `pools standby <pool> --role <role> --in <region> --season <from>..<to>` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `task.raised` | `pools raise <pool> --role <role> --in <region> --sooner` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `pool.invited` | `pools invite <pool> --role <role> --in <region>` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `pool.widened` | `pools widen <pool> --role <role> --to <region>` | [Pool health](https://services.dev/docs/operate/pool-health.md#a-week-in-april) |
| `clock.assigned` | `clocks assign <clock> <member>` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `clock.satisfied` | `clocks satisfy <clock>` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `clock.chosen` | `clocks choose <clock> <option>` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `clock.acked` | `clocks ack <clock>` | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `hold.placed` | `hold <service>.<step>`, `hold <service>.<step> --to <role>`, `hold <service> --drain` | [Incidents](https://services.dev/docs/operate/incidents.md#the-four-controls) |
| `job.held` | `hold <service>.<step>` | [Incidents](https://services.dev/docs/operate/incidents.md#the-four-controls) |
| `job.sent_back` | `jobs send-back --affected <filter> --from <step>`, `jobs send-back <job> <note> --from <step>` | [Incidents](https://services.dev/docs/operate/incidents.md#what-it-already-touched) |
| `hold.lifted` | `hold lift <hld>` | [Incidents](https://services.dev/docs/operate/incidents.md#lift-it-without-going-back) |
| `incident.opened` | `incidents get <inc>` | [Incidents](https://services.dev/docs/operate/incidents.md#after-it) |
| `incident.closed` | `incidents get <inc>` | [Incidents](https://services.dev/docs/operate/incidents.md#after-it) |
| `brand.stopped` | `stop --live` | [Incidents](https://services.dev/docs/operate/incidents.md#drain-or-stop-everything) |
| `brand.started` | `start --live` | [Incidents](https://services.dev/docs/operate/incidents.md#drain-or-stop-everything) |
| `key.rotated` | `keys rotate --all --live` | [Incidents](https://services.dev/docs/operate/incidents.md#which-control-for-which-cause) |
| `charge.refunded` | `jobs refund <job>` | [Support](https://services.dev/docs/operate/support.md#a-refund-on-two-sellers) |
| `dispute.opened` | `disputes get <dsp>` | [Support](https://services.dev/docs/operate/support.md#a-dispute) |
| `dispute.closed` | `disputes submit <dsp>` | [Support](https://services.dev/docs/operate/support.md#a-dispute) |
| `task.ruled` | `tasks rule <task> upheld\|overturned` | [Support](https://services.dev/docs/operate/support.md#the-queue) |
| `limit.reached` | `limits` | [Limits](https://services.dev/docs/operate/limits.md#where-you-stand) |
| `plan.accepted` | `plan upgrade <plan>` | [Limits](https://services.dev/docs/operate/limits.md#at-a-plan-limit) |
| `quality.alarm` | the alarm its key sets | [Incidents](https://services.dev/docs/operate/incidents.md#respond-before-you-read) |
| `ai.capped` | the alarm its key sets | [Limits](https://services.dev/docs/operate/limits.md#every-limit) |
| `pool.alarm:claim_slow` | the alarm its key sets | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `pool.alarm:unreached` | the alarm its key sets | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `pool.alarm:no_eligible` | the alarm its key sets | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `pool.alarm:overloaded` | the alarm its key sets | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `pool.alarm:payout_late` | the alarm its key sets | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `pool.alarm:cover_lapsing` | the alarm its key sets | [Pool health](https://services.dev/docs/operate/pool-health.md#the-measures) |
| `clock.vacant` | the alarm its key sets | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `job.at_risk` | the alarm its key sets | [Dates at risk](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) |
| `line.reverted` | the alarm its key sets | [Move a step to AI](https://services.dev/docs/operate/line.md#when-the-model-changes) |
| `holdout.found` | the alarm its key sets | [Move a step to AI](https://services.dev/docs/operate/line.md#holdouts) |

---

- Up: [Your first paid job](https://services.dev/docs.md)
- Previous: [Credentials](https://services.dev/docs/reference/credentials.md)
- Next: [Errors](https://services.dev/docs/reference/errors.md)
