# Brussle - [Introduction](https://docs.brussle.com/index.md): A judgment layer for your data: typed judgments about your records, kept current, queryable and calibrated to your outcomes. - [Quickstart](https://docs.brussle.com/quickstart.md): From an API key to your first answers in five steps. - [SDKs](https://docs.brussle.com/sdks.md): Python and TypeScript clients, generated from the API contract. - [System behavior](https://docs.brussle.com/behavior.md): How the system is designed to behave, so you can build on it. - [Tradeoffs](https://docs.brussle.com/tradeoffs.md): What you give up for the cost structure, stated plainly. - [Namespaces](https://docs.brussle.com/concepts/namespaces.md): The unit of isolation, storage, caching, billing and scale. - [Documents](https://docs.brussle.com/concepts/documents.md): Records with filterable attributes and the state judgments are made about. - [Judgments](https://docs.brussle.com/concepts/judgments.md): Typed questions kept answered for every document. - [Relations](https://docs.brussle.com/concepts/relations.md): How a judgment reads more than the document it judges: related documents, the document it points at, other judgments' answers, candidates to choose among, and the document as it was. - [Answers](https://docs.brussle.com/concepts/answers.md): The current, queryable value of a judgment for a document. - [Calibration](https://docs.brussle.com/concepts/calibration.md): How answers learn from what actually happened, so a probability means what it says. - [Evaluations](https://docs.brussle.com/concepts/evaluations.md): The immutable record of every computation, kept for as long as its namespace. - [Freshness](https://docs.brussle.com/concepts/freshness.md): Whether an answer reflects the document's current revision, and when answers are computed. - [Subscriptions](https://docs.brussle.com/concepts/subscriptions.md): A saved query that tells you when a document starts or stops matching it. - [Composite judgments](https://docs.brussle.com/guides/composite-judgments.md): Split a fuzzy yes/no question into narrow parts, combined by weights fitted on your labels, and measured on them before it answers. - [Writing a context recipe](https://docs.brussle.com/guides/context-recipes.md): Context size is the cost. Send the engine what it needs and nothing else. - [Starter judgments](https://docs.brussle.com/guides/starter-judgments.md): Ready-made judgments for common questions, filled in with your own paths. - [Choosing a freshness policy](https://docs.brussle.com/guides/freshness-policies.md): Compute answers when documents change, when they are read, or on a schedule. - [Measure, improve, tune](https://docs.brussle.com/guides/measure-improve-tune.md): Find out how good a judgment is on your data, change it safely, and pick thresholds from your own outcomes. - [Migrating from an LLM classification pipeline](https://docs.brussle.com/guides/migrating-from-llm-classification.md): Move an existing classifier onto judgments: measure accuracy first, then cut over in a week. - [Import existing data](https://docs.brussle.com/guides/import-existing-data.md): Load your existing records in full batches, retry freely, and judge them once with the cost in front of you. - [Keep your data in sync](https://docs.brussle.com/guides/keep-data-in-sync.md): Copy every change from your database with whole-document upserts, never miss one with an outbox, and check the two agree, and get told when answers change instead of polling. - [Receive webhooks](https://docs.brussle.com/guides/webhooks.md): Verify each delivery's signature, answer fast, and know how retries, failing endpoints and our egress address work. - [Read the events feed](https://docs.brussle.com/guides/events-feed.md): Every event your organization recorded in the last 30 days, in order, to poll instead of receiving webhooks or to catch up after an outage. - [Multi-tenant platforms](https://docs.brussle.com/guides/multi-tenant-platforms.md): One namespace per tenant: isolated, independently billed, and free when idle. - [Templates](https://docs.brussle.com/guides/templates.md): Define a judgment once on a namespace prefix, and every tenant under it has it. - [Staging and test environments](https://docs.brussle.com/guides/staging-environments.md): Staging as a prefix in your production organization: its own key and budgets, left out of the tenant fee and production calibration. - [Export audit and evaluation history](https://docs.brussle.com/guides/export-history.md): Take your evaluations, with their contexts, answers and outcomes, and your audit log into your own systems. Scale plan. - [Single sign-on](https://docs.brussle.com/guides/sso.md): Your people sign in to the dashboard through your identity provider, SAML or OIDC. Scale plan. - [Judge a document with its related documents](https://docs.brussle.com/guides/related-documents.md): Judge an account with its tickets and invoices, a user with their posts or a conversation with its messages, and keep the answer current as any of them change. - [Judge a document with the document it points at](https://docs.brussle.com/guides/referenced-document.md): Judge an order line with its product, and control what re-judging costs when that product changes. - [Roll up answers from related documents](https://docs.brussle.com/guides/roll-ups.md): Judge an account from its conversations' answers: read another judgment's answer at a path in a relation, banded or cut, kept current as those answers change. - [Match one record to another](https://docs.brussle.com/guides/entity-matching.md): Find which open invoice a payment settles, or which role a candidate fits: candidates that share a key, and one judgment that chooses among them. - [Judge what changed since the last verdict](https://docs.brussle.com/guides/change-detection.md): Show the engine a document as the judgment last saw it, beside the current version, to moderate edits and watch records for material change. - [Discover new options](https://docs.brussle.com/guides/discovery.md): Find out what a choice judgment's escape option holds, get a proposal for the options it is missing, and review it before you create the version. - [Report on groups of documents](https://docs.brussle.com/guides/groups.md): Declare a group-by once, such as frustrated conversations by plan this month, and read its counts, sums and averages per key value with no pipeline. - [Summarize every tenant](https://docs.brussle.com/guides/tenant-summary.md): Publish a banded document per tenant namespace into your template's namespace, then judge, query and subscribe to your tenants like any documents. - [Simulate a policy change](https://docs.brussle.com/guides/policy-simulation.md): Before you change a rulebook that many documents are judged against, see what it would flip, with an interval, on a sample, for free. - [Engines](https://docs.brussle.com/engines/index.md): Every engine version in the registry, with its limits and conformance results. - [jev current](https://docs.brussle.com/engines/jev-current.md): Limits, data handling and conformance results for jev current. - [Pricing](https://docs.brussle.com/pricing.md): Usage-based pricing: judgments, storage, writes, queries and pinning, with plans that set a minimum per billing period and what's included. - [Limits](https://docs.brussle.com/limits.md): Every limit the API enforces. - [List namespaces](https://docs.brussle.com/api-reference/namespaces/list-namespaces.md) - [Get namespace metadata, counts and budget](https://docs.brussle.com/api-reference/namespaces/get-namespace-metadata-counts-and-budget.md) - [Delete the namespace and everything in it](https://docs.brussle.com/api-reference/namespaces/delete-the-namespace-and-everything-in-it.md): Deletes the namespace at once: when it returns, nothing of it is readable, and a write to the same name creates a new, empty namespace. Starts a `namespace_delete` job that removes the deleted namespace's data from storage within 24 h, and cancels the namespace's other open jobs, with `error` "the n… - [Change budget, pinning and default engine](https://docs.brussle.com/api-reference/namespaces/change-budget-pinning-and-default-engine.md): These are the namespace's settings. Raising the budget clears `budget_paused` at once. - [Warm the namespace's caches](https://docs.brussle.com/api-reference/namespaces/warm-the-namespaces-caches.md): Free and best-effort. Warms the namespace's caches, so the queries that follow are not cold. - [Write documents (upsert, patch, append, delete)](https://docs.brussle.com/api-reference/documents/write-documents-upsert-patch-append-delete.md): Operations apply in the order upsert, patch, append, delete and commit atomically for the namespace. A request is never split across two commits. The namespace is created by its first write. - [Get a document, its answers and optional history](https://docs.brussle.com/api-reference/documents/get-a-document-its-answers-and-optional-history.md): Reading a document with `on_read` judgments triggers their evaluation; the first read returns them `pending` unless `wait_ms` is passed. - [Get one evaluation record](https://docs.brussle.com/api-reference/documents/get-one-evaluation-record.md): One evaluation of any document in the namespace, any incarnation and any judgment, with its compiled context and the engine's raw response. Shadow evaluations are included, marked `shadow`. Unlike a document's history, it is found by id alone. - [Export evaluation history](https://docs.brussle.com/api-reference/documents/export-evaluation-history.md): Starts an `evaluation_export` job over the namespace's evaluations created in `[since, until)`: every evaluation of every judgment, or of `judgments`, shadow and replay evaluations included. Poll `GET /jobs/{id}`: once the job is `done`, its `export.files` link each file for an hour, and a new `GET`… - [Filter, rank and page documents](https://docs.brussle.com/api-reference/documents/filter-rank-and-page-documents.md): Filters, ranks and pages the namespace's documents. A query whose estimated scan exceeds 4 GB is refused with `too_large` and the estimate, and is not billed. Filtering or ranking on an `on_read` judgment is `invalid_request`. - [List active judgments](https://docs.brussle.com/api-reference/judgments/list-active-judgments.md): A namespace's list includes the judgments it inherits from templates, each marked with its `template`. On a prefix path it lists the template's own judgments. - [Create a judgment, or a new version of an existing name](https://docs.brussle.com/api-reference/judgments/create-a-judgment-or-a-new-version-of-an-existing-name.md): Posting a name that exists creates version `n+1`; versions are immutable. The first version of a name is active on creation; a later version is inactive until activated, unless `activate: true`, which implies `force` and skips the shadow report. - [Get all versions, the active version and thresholds](https://docs.brussle.com/api-reference/judgments/get-all-versions-the-active-version-and-thresholds.md) - [Deactivate a judgment](https://docs.brussle.com/api-reference/judgments/deactivate-a-judgment.md): Answers and evaluations are retained. On a prefix path this deactivates the template for every namespace that inherits it. A namespace cannot delete a judgment it inherits (`conflict`); it can detach it first. - [Change freshness, thresholds and outcome settings without a new version](https://docs.brussle.com/api-reference/judgments/change-freshness-thresholds-and-outcome-settings-without-a-new-version.md): Freshness settings, thresholds and outcome settings are not part of the definition, so this creates no version. - [Make a version the one new evaluations use](https://docs.brussle.com/api-reference/judgments/make-a-version-the-one-new-evaluations-use.md): Existing answers keep their `judgment_version` until recomputed. Activating a version whose engine or definition differs from the active one without `force` returns a `shadow` job in `awaiting_confirm` (`202`). The job evaluates a random sample of 1,000 documents under the new version, never produci… - [Estimate a backfill, or run it with confirm](https://docs.brussle.com/api-reference/judgments/estimate-a-backfill-or-run-it-with-confirm.md): Without `confirm`, returns the estimate and does nothing. With `confirm: true`, starts a job. A backfill judges the documents in its scope that have no successful answer from the active version for their current revision, and its estimate counts those, as they are when you ask. Backfills respect the… - [Detach an inherited judgment from its template](https://docs.brussle.com/api-reference/judgments/detach-an-inherited-judgment-from-its-template.md): Turns a judgment the namespace inherits from a template into an ordinary judgment of the namespace, a copy of the current version. The copy keeps the template's version numbers, up to and including the active version, which stays active, so existing answers still name a version the judgment has. Its… - [Suggest sub-questions for a composite judgment](https://docs.brussle.com/api-reference/judgments/suggest-sub-questions-for-a-composite-judgment.md): Asks a third-party LLM provider for `count` narrow yes/no sub-questions. It is given the judgment's `question` and `criteria` (of the newest version), and a sample of the namespace's labelled examples for the judgment, compiled with the judgment's context recipe. It returns the proposed parts and th… - [Simulate a change to a referenced document](https://docs.brussle.com/api-reference/judgments/simulate-a-change-to-a-referenced-document.md): What a proposed body for a referenced document, such as a rulebook's new rules, would flip before you write it. A `simulation` job counts the in-scope judged documents that point at the document, samples `sample` of them with known weights, and evaluates the current and the proposed rendering agains… - [Propose options for what the escape option holds](https://docs.brussle.com/api-reference/judgments/propose-options-for-what-the-escape-option-holds.md): For a fixed-option `choice` only: a `discover` job samples recent documents in `window` whose answer is `none_of_the_above` (or whose `escape_p` is at or above the lowest threshold any name sets on `none_of_the_above`, when one does) and sends them, compiled with the judgment's recipe, to a third-pa… - [List templates](https://docs.brussle.com/api-reference/judgments/list-templates.md): The organization's templates: every namespace prefix a judgment was created on, in name order. A template stays listed after its judgments are deactivated, because it still decides which judgments the namespaces under it inherit. Manage a template's judgments on its prefix path (`/namespaces/acme%2F… - [List starter judgments](https://docs.brussle.com/api-reference/judgments/list-starter-judgments.md): Ready-made judgments for common questions: ticket triage, moderation, churn risk, lead quality and review queues. Each is a definition whose paths are placeholders such as `{subject}`, the placeholders it needs, and a suggested outcome setting. Create one with `from_starter` and your own `paths` on… - [Append observed outcomes or labelled examples](https://docs.brussle.com/api-reference/outcomes-and-calibration/append-observed-outcomes-or-labelled-examples.md): Outcomes are append-only. They are joined when calibration, the report or a recommendation reads them, never when posted, so an evaluation or an outcome that arrives late still counts. An outcome that joins nothing is kept, and the calibration report counts it in `unmatched_outcomes`. Outcomes feed… - [Get the calibration report for the active version](https://docs.brussle.com/api-reference/outcomes-and-calibration/get-the-calibration-report-for-the-active-version.md): How well the active version's answers match the outcomes joined to its evaluations, per engine epoch, before and after calibration. Calibration is fitted per judgment version and per engine epoch, first within minutes of the judgment's first posted outcome or first outcome rules, and then nightly. F… - [Recommend a threshold for a precision or recall target](https://docs.brussle.com/api-reference/outcomes-and-calibration/recommend-a-threshold-for-a-precision-or-recall-target.md): The threshold on the raw `p` (bool) or raw `dist[option]` (choice) that meets the target on the active version's outcomes. A document counts as predicted positive when the raw value is at least the threshold, and as positive when its outcome is `true` (bool) or equals `option` (choice). - [Preview the labelling queue by probability band](https://docs.brussle.com/api-reference/outcomes-and-calibration/preview-the-labelling-queue-by-probability-band.md): What the labelling queue would draw from: the answers of the version answers are read as, in its current engine epoch, split into 10 equal-width bands of their raw value (`p`, or the most probable option's or level's probability). Per band, the answers, the documents already labelled from the queue… - [Draw documents to label](https://docs.brussle.com/api-reference/outcomes-and-calibration/draw-documents-to-label.md): Draws up to `count` documents to label, a random sample stratified across the probability range, so the queue hands out documents from every `band`, not just where most answers sit. Within a band, documents come in an order fixed by `seed`, so the same state and seed give the same items. Documents a… - [Get the cheaper context recipe the outcomes support](https://docs.brussle.com/api-reference/outcomes-and-calibration/get-the-cheaper-context-recipe-the-outcomes-support.md): The last recipe-tuning run of the active version. Once a version's calibration is fitted, and then at most every 30 days, a run tests cheaper variants of the recipe against your labelled outcomes, using the contexts already stored with your evaluations, sent to the same engine on the same terms. A s… - [Run this month's recipe tuning now](https://docs.brussle.com/api-reference/outcomes-and-calibration/run-this-months-recipe-tuning-now.md): Starts this month's recipe-tuning run of the active version, or returns it: one run per version, engine epoch and calendar month (UTC), whether this or the nightly calibration starts it. The response is the suggestion as it stands, `running` until the run ends. Runs are never billed. On a template p… - [List groups](https://docs.brussle.com/api-reference/groups/list-groups.md): A namespace's list includes the groups it inherits from templates, each marked with its `template`. Rows are left out; get one group for them. - [Create a group](https://docs.brussle.com/api-reference/groups/create-a-group.md): A group keeps aggregates per value of a key attribute, over the documents matching `match`, and `GET` reports them: a group-by you declare, for reporting. The aggregates are at most about an hour behind the namespace's writes. - [Get a group and its rows](https://docs.brussle.com/api-reference/groups/get-a-group-and-its-rows.md): The definition, its status, and in a namespace the rows, one per live key value, with `as_of`, the namespace position they are exact at. On a template's prefix path, `rows` is null: each tenant has its own. - [Delete a group](https://docs.brussle.com/api-reference/groups/delete-a-group.md): On a prefix path it deletes the group for every namespace under the prefix; a namespace cannot delete a group it inherits (`conflict`). - [Add aggregates or change keep_keys](https://docs.brussle.com/api-reference/groups/add-aggregates-or-change-keep_keys.md): `aggregate` adds to the group's aggregates (existing ones never change meaning and are never removed); it starts a `group_build` job for the new ones. A namespace cannot change a group it inherits (`conflict`). - [Get the tenant summary and each tenant's status](https://docs.brussle.com/api-reference/groups/get-the-tenant-summary-and-each-tenants-status.md): The settings, `warnings` (`tenant_summary_failed` when the template's namespace refused the writes), and a page of tenants by name, each `published`, `unchanged`, `skipped` with its reason, or `pending` when a run has not reached it, with `published_at` and `source_as_of`. The lag behind a tenant is… - [Publish a tenant document per namespace under a template](https://docs.brussle.com/api-reference/groups/publish-a-tenant-document-per-namespace-under-a-template.md): Once an hour a job reads each tenant's `groups` under this template and writes a tenant document into the template's own namespace (`acme/prod` for `acme/prod/*`): `id` the tenant's namespace name, `attributes.kind` `tenant`, `state.groups` the banded aggregates as their labels, `state.source` where… - [Stop publishing tenant documents](https://docs.brussle.com/api-reference/groups/stop-publishing-tenant-documents.md): No more runs. The tenant documents already written stay, as ordinary documents of the template's namespace. - [Change the published groups, bands or keys](https://docs.brussle.com/api-reference/groups/change-the-published-groups-bands-or-keys.md): A change rewrites every tenant document at the next run, which re-judges each of them, so without `confirm: true` it returns that estimate and changes nothing. With it, the change applies from the next run and runs unattended. - [List subscriptions](https://docs.brussle.com/api-reference/subscriptions/list-subscriptions.md): A namespace's list includes the subscriptions it inherits from templates, each marked with its `template`. On a prefix path it lists the template's own subscriptions. - [Create a subscription](https://docs.brussle.com/api-reference/subscriptions/create-a-subscription.md): A subscription is a saved query: a `filters` expression in the query grammar, with the same meaning, and the fields to include. It sends `subscription.entered` when a document starts matching and, if asked, `subscription.exited` when it stops, to `endpoint` and to the events feed. It sees only settl… - [Get a subscription, its status and lag](https://docs.brussle.com/api-reference/subscriptions/get-a-subscription-its-status-and-lag.md) - [Delete a subscription](https://docs.brussle.com/api-reference/subscriptions/delete-a-subscription.md): No more events are sent for it, and its membership is deleted at the namespace's next evaluation of its subscriptions. On a prefix path it is deleted for every namespace under the template, on any plan: it is the way out of a template frozen by a downgrade. A namespace cannot delete a subscription i… - [Change a subscription's events, include, endpoint or bulk](https://docs.brussle.com/api-reference/subscriptions/change-a-subscriptions-events-include-endpoint-or-bulk.md): Changes `events`, `include`, `endpoint` and `bulk`, from the next event on. `filters` never changes (`invalid_request`): a different filter has no honest edges, so create a new subscription and delete this one. A namespace cannot change a subscription it inherits (`conflict`); change it on the templ… - [Query the documents that match a subscription now](https://docs.brussle.com/api-reference/subscriptions/query-the-documents-that-match-a-subscription-now.md): Runs the subscription's filter as a query, with your own ranking, page size, cursor and fields, and bills like one. Use it to seed a receiver, and to re-read the members after `subscription.synced`. For a template's subscription, call it on the tenant namespace an event names. - [Get progress, estimate and spend](https://docs.brussle.com/api-reference/jobs/get-progress-estimate-and-spend.md) - [Start a job in awaiting_confirm](https://docs.brussle.com/api-reference/jobs/start-a-job-in-awaiting_confirm.md): Starts the job. On a job already running it changes nothing and returns `200`; from any other state it is `conflict`. - [Pause a running job](https://docs.brussle.com/api-reference/jobs/pause-a-running-job.md): The job stops within about a second: requests already sent to the engine finish, and nothing more is sent. Everything it judged is billed and counted in its `progress.documents_done` and `spend_usd`, which can still rise for that second after this returns. Resuming continues from where it stopped. - [Resume a paused job](https://docs.brussle.com/api-reference/jobs/resume-a-paused-job.md): Resumes the job. On a job already running it changes nothing and returns `200`; from any other state it is `conflict`. - [Cancel a job](https://docs.brussle.com/api-reference/jobs/cancel-a-job.md): The job stops for good, as a pause stops it: within about a second, with the requests already sent to the engine finishing and nothing more sent. What it judged stays billed and counted in its `progress.documents_done` and `spend_usd`. - [List active engine versions](https://docs.brussle.com/api-reference/engines/list-active-engine-versions.md): Active engine versions with their limits and conformance results. Never prices; judging is billed per judgment, by size class, whichever engine answers. - [List non-production prefixes](https://docs.brussle.com/api-reference/organization/list-non-production-prefixes.md): The prefixes the organization marked non-production, such as `acme/staging/`, oldest first. A namespace under one counts toward the tenant fee only for judgments made while it was not marked, and a template's calibration pool leaves out its tenants under one, unless the template is itself under it.… - [Mark a prefix non-production](https://docs.brussle.com/api-reference/organization/mark-a-prefix-non-production.md): Marks the prefix non-production from the next whole UTC hour. It need not have namespaces under it yet: mark staging before its first judgment. Marking a marked prefix changes nothing. At most 20 are marked at once, and at most 100 markings count at once, each while marked and for 90 days after it i… - [Unmark a non-production prefix](https://docs.brussle.com/api-reference/organization/unmark-a-non-production-prefix.md): Unmarks the prefix from the start of the current UTC hour: judgments from then on count its namespaces toward the tenant fee, and its tenants rejoin their template's calibration pool at the next nightly fit. Unmarking a prefix that is not marked changes nothing. Needs a `read_write` key scoped to th… - [List webhook endpoints](https://docs.brussle.com/api-reference/webhooks/list-webhook-endpoints.md): The endpoints whose `namespace_prefix` lies inside the key's scope, without their secrets. - [Create a webhook endpoint](https://docs.brussle.com/api-reference/webhooks/create-a-webhook-endpoint.md): An HTTPS URL we push events to, signed with the endpoint's `secret` (Standard Webhooks), which the response carries. The endpoint receives the events of every subscription that names it, plus the platform events its `events` patterns match (such as `job.*`), for namespaces its `namespace_prefix` cov… - [Get a webhook endpoint, its status and stats](https://docs.brussle.com/api-reference/webhooks/get-a-webhook-endpoint-its-status-and-stats.md): With a `read_write` key the endpoint carries its `secret`; with a `read_only` key it does not. - [Delete a webhook endpoint](https://docs.brussle.com/api-reference/webhooks/delete-a-webhook-endpoint.md): Its pending deliveries and its delivery log go with it. Subscriptions that name it keep sending their events to the feed only. - [Change a webhook endpoint, or enable it again](https://docs.brussle.com/api-reference/webhooks/change-a-webhook-endpoint-or-enable-it-again.md): `enabled: true` makes a `disabled` endpoint `active` again; new events are delivered from then on, and `recover` re-sends what it missed. `enabled: false` disables it: its deliveries are `skipped`, and events still reach the feed. - [Rotate a webhook endpoint's secret](https://docs.brussle.com/api-reference/webhooks/rotate-a-webhook-endpoints-secret.md): Returns a new secret. The old one keeps signing beside it for `previous_valid_for`, so each request carries both signatures in `webhook-signature` until `previous_secret_expires_at`. - [Send a test event](https://docs.brussle.com/api-reference/webhooks/send-a-test-event.md): Sends `webhook.test` to this endpoint, or with `type` a sample of that type. Either is marked `test: true`. It goes to this endpoint only, never to the feed, and appears in the delivery log like any delivery. To a `disabled` endpoint the delivery is `skipped`. - [List an endpoint's deliveries](https://docs.brussle.com/api-reference/webhooks/list-an-endpoints-deliveries.md): The delivery log, newest first, kept for 30 days. Each delivery has its attempts so far and the last one's result. - [Re-send every failed or skipped delivery since a time](https://docs.brussle.com/api-reference/webhooks/re-send-every-failed-or-skipped-delivery-since-a-time.md): The catch-up after an outage or a disabled endpoint: every `failed` or `skipped` delivery to this endpoint created at or after `since` (at most 30 days back) is sent again, with its event's `webhook-id`. An endpoint that is `disabled` is `conflict`: enable it first. - [Read the events feed](https://docs.brussle.com/api-reference/webhooks/read-the-events-feed.md): Every event the organization recorded in the last 30 days, oldest first in the order they were recorded, limited to the key's scope. Without `cursor` it starts at the oldest. `next_cursor` is always present, even on an empty page, so a poller resumes exactly where it stopped. `cursor` also takes an… - [Get an event and its deliveries](https://docs.brussle.com/api-reference/webhooks/get-an-event-and-its-deliveries.md) - [Send an event to an endpoint again](https://docs.brussle.com/api-reference/webhooks/send-an-event-to-an-endpoint-again.md): Queues a new delivery of the event to `endpoint`, with the same `webhook-id`, whatever became of the earlier ones. A `disabled` endpoint is `conflict`. - [subscription.entered](https://docs.brussle.com/api-reference/webhooks/subscriptionentered.md): A document started matching a subscription. It carries the included attributes and answers, as the get returns them. - [subscription.exited](https://docs.brussle.com/api-reference/webhooks/subscriptionexited.md): A document stopped matching a subscription, or was deleted (`reason`). - [subscription.synced](https://docs.brussle.com/api-reference/webhooks/subscriptionsynced.md): Membership changed in bulk without per-document events. Re-read the members with the subscription's `query`. - [job.awaiting_confirm](https://docs.brussle.com/api-reference/webhooks/jobawaiting_confirm.md): A job waits for `POST /jobs/{id}/confirm`, such as a shadow job with its report ready to review. - [job.completed](https://docs.brussle.com/api-reference/webhooks/jobcompleted.md): A job finished `done`. - [job.failed](https://docs.brussle.com/api-reference/webhooks/jobfailed.md): A job ended `failed`; the job's `error` says why. - [namespace.budget_paused](https://docs.brussle.com/api-reference/webhooks/namespacebudget_paused.md): Judging in a namespace paused at its budget, or at quickstart's limit, for the rest of the organization's billing period. - [namespace.budget_resumed](https://docs.brussle.com/api-reference/webhooks/namespacebudget_resumed.md): Judging in a namespace resumed, after the budget was raised or removed, or a new billing period began. - [judgment.limit_reached](https://docs.brussle.com/api-reference/webhooks/judgmentlimit_reached.md): A change's fan-out passed a judgment's rolling limit, or a block grew past its `block_cap`, so the change waits until there is room. `limit` says which. Sent once per deferred change. - [judgment.taxonomy_drift](https://docs.brussle.com/api-reference/webhooks/judgmenttaxonomy_drift.md): A choice judgment's share of `none_of_the_above` answers over the last 7 days rose above its `escape_alert`. Sent once per rise. - [namespace.tenant_summary_failed](https://docs.brussle.com/api-reference/webhooks/namespacetenant_summary_failed.md): A tenant summary run could not write a tenant's document into the template's namespace, such as when that namespace refuses writes over its budget with `on_exceeded: reject`. - [webhook.test](https://docs.brussle.com/api-reference/webhooks/webhooktest.md): Sent by a test send without a `type`, marked `test: true`. ## OpenAPI Specs - [openapi](/api-reference/openapi.yaml) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.