# Emergency stop

> Pause gateway traffic for the organization, one environment, one project or every key but the ones you name, without a deploy, and resume it in one step.

Source: https://infro.io/docs/security/emergency-stop

> **Warning:** **On the roadmap — not available yet.** The emergency stop is built and in testing, and not deployed. This page describes what it will ship with.

The **emergency stop** pauses your organization's AI traffic through INFRO in one step: no deploy, no key revoked, nothing deleted. Keys keep their secrets, limits and settings, and connections stay connected; resuming makes the same keys work again on their next request. It is on every plan.

## What it stops

You choose one scope each time you press it:

| Scope | Stops | Keeps working |
| --- | --- | --- |
| Organization | Every gateway request, the [MCP gateway](https://infro.io/docs/mcp-gateway)'s tool calls, the Playground (with a gateway key or a connection test) and INFRO Studio. | Nothing that calls a model. |
| One environment | Gateway keys in that environment, Playground connection tests whose connection's first environment it is, and Studio runs when the environment is `production` (Studio counts as production). | Keys in other environments, and keys that name no environment. |
| One project | Gateway keys in that project. | Every other key, Playground connection tests and Studio, which belong to no project. |
| Every key except | Every gateway key except the ones you name (up to 50), Playground connection tests and Studio. A named key's rotations keep running too. | The named keys. |

- A stopped request is refused with `403`, type `permission_denied`, code `organization_paused`, before any budget, routing or provider call. It is not retryable: the same request is refused until the stop is released.
- It is not `organization_suspended`, which is INFRO's own hold on an account and is resolved by contacting support. When both apply, `organization_suspended` is returned.
- Video jobs that are queued and not yet sent to the provider fail. A render the provider has already accepted finishes there. Studio refuses a run that would start, and each step before it is sent.
- Reads keep working: the console, request history, `GET /v1/usage` and `GET /v1/key`. Requests a stopped key makes that read the routing configuration (`GET /v1/models`, cost estimates, token counts) are refused like model calls. Checks INFRO runs on your connections (connection health, cost and usage reads) are not traffic and keep running.
- It holds everywhere within five seconds of pressing, because each gateway process keeps an organization's settings for up to five seconds. Releasing it takes the same time.

## Press it

1. Under **Security**, choose **Emergency stop** and the scope.
2. Say why, in a few words (3 to 500 characters). Every member's email carries it.
3. Confirm it's you: the stop needs a [confirmation](https://infro.io/docs/org/security#confirm-its-you) from the last 10 minutes in this browser, like deleting the organization.

Only one stop is in force at a time. Pressing a new one replaces the one in force in the same step, so traffic is never released in between; the old one is listed as replaced. If two members press it at the same instant, one of them gets `409` `pause_conflict` and reloads to see the stop in force.

Pressing and releasing are each in the [audit log](https://infro.io/docs/org/audit-log) (`organization.paused`, `organization.resumed`, with the scope, the reason and the IP address), and each raises a critical [signal](https://infro.io/docs/security/signals) that is emailed to every member and cannot be muted. Both work while the organization is locked for a lapsed plan or held, since they only stop traffic.

## Release it

**Resume traffic**, with an optional note, releases the stop in force. The same people who may press it may release it, with the same confirmation. A stop pressed through the management API or by an AI assistant is released only here, by a person.

## Who holds it

- Owners, admins and [Security](https://infro.io/docs/org/members#security-role) members, with their role.
- Developer, analyst and finance members an owner or admin [grants it to](https://infro.io/docs/org/members#emergency-stop-grant). The grant works only while the member has two-factor on.
- Never a creator, and never a member limited to some projects: the stop is organization-wide.

Anyone who reads the Security screen sees whether a stop is in force and the last ten.

## API

Through the console session: `GET /console/security/pause` returns `active` (the stop in force, or `null`), `history` (up to the last ten) and `can_stop`. Each stop has `id`, `scope`, `environment`, `project_id`, `except_key_ids`, `reason`, `paused_at`, `paused_by`, `resumed_at`, `resumed_by` and `ended_how` (`resumed` or `replaced`).

- `scope` (string, required) — `organization`, `environment`, `project` or `keys_except`.
- `environment` (string) — Required with `environment`, and only with it: one of the organization's environments (`400` `unknown_environment` otherwise).
- `project_id` (string) — Required with `project`, and only with it.
- `except_key_ids` (string[]) — Required with `keys_except`, and only with it: 1 to 50 active gateway keys of the organization.
- `reason` (string, required) — 3 to 500 characters.

`POST /console/security/pause` with that body returns `201` with `pause` and `replaced_pause_id`. `POST /console/security/pause/resume` with an optional `note` (up to 500 characters) returns `{resumed: true, pause_id}`, or `400` `not_paused` when no stop is in force. Refusals: `403` `insufficient_role` for a member who does not hold the stop, `403` `session_required` for a management token, `403` `reauthentication_required` when the confirmation is older than 10 minutes (the console then asks for it and retries), and `403` `two_factor_required` for a granted member whose two-factor is off.

**On the roadmap.** Security through the management API and MCP is built and not deployed. `POST /manage/v1/organization/pause` presses the stop with the same body, for a [management token](https://infro.io/docs/manage/tokens) holding `security:write` whose creator holds the stop; the MCP tool `pause_organization` does the same for an AI assistant, after it confirms with you. Both are audited with the token or assistant as the actor, and every member is emailed. `POST /manage/v1/organization/pause/resume` always answers `403` `session_required`: a token or an assistant can press the stop, never release it, so a stolen token cannot restart traffic someone stopped on purpose. For the same reason, while a stop is in force a token or an assistant may only replace it with the `organization` scope; any other scope answers `409` `pause_in_force`, and a person changes the stop in the console. `GET /manage/v1/organization/pause` reads it.
