An AI agent or automation that already works in your organization sometimes needs to give a helper of its own (a sub-agent, a script, a CI step) a SendOps API key. Instead of sharing its own key, it can **ask you for a new, narrower one**. That ask is a **key request**.

A request creates no key. You see what was asked for, by whom, and why, and you approve or deny it. Only after you approve can the agent collect the key, and the secret goes straight to the agent. You never see it, and it is never shown again.

## What an agent can ask for

Every request has limits built in, whatever the agent asks:

- **Only less than it already has.** The scopes requested must be ones the asking key or connection already holds.
- **Always temporary.** A requested key expires: 30 days unless the agent asks for less, and never more than 90.
- **No chains.** A key obtained this way can never ask for keys itself.
- **Same environment.** A test key or test connection can only get a test key.
- **Not many at once.** At most 3 open requests per key or connection and 5 per organization, and no more than 10 requests per key or connection per hour.

## Who is notified

When a request comes in, every **Owner** and **Org Admin** gets the **API Key Requested** notification, in the app and by email. It names the key or connected app that asked, the key name, the environment, the scopes, the lifetime, and the agent's reason. The email's **Review key request** button opens the API Keys page.

You can change how you receive it in [notification settings](/notifications/configuring-notifications). Members and other roles are not notified and cannot approve.

## Approving or denying a request

Open requests appear at the top of **Workspace → API Keys**, in a **Pending key requests** panel. The panel only appears when there is something to decide, and only to people who can manage API keys.



Each row shows who asked (a key icon for an API key, a robot icon for a connected app such as an MCP client), the key name, Live or Test, the scopes, the lifetime, the reason, and how long until the request lapses.


<Step title="Read the request">
  Check who is asking and why. If the reason doesn't make sense, or the scopes look broader than the job needs, deny it or approve less.
</Step>
<Step title="Approve, narrowing if you like">
  Select **Approve**. Every requested scope starts ticked: untick any the key doesn't need. You can also shorten the lifetime. You can't add a scope or lengthen the lifetime; to give more, ask the agent to make a new request.

  You must keep at least one scope. If none should be granted, deny the request instead.
</Step>
<Step title="Confirm your identity if asked">
  If your organization enforces two-factor authentication, approving asks for a fresh MFA check, the same as creating a key yourself.
</Step>


To refuse, select **Deny**. You can add a reason (up to 500 characters); the agent sees it and can tell its user why. No key is created.

You can only approve scopes you could grant yourself, exactly as when creating a key in the dashboard.

## After you approve

The agent has **one hour** to collect the key. If it doesn't, the request lapses and nothing is created. A request nobody decides within **24 hours** lapses too.

When the agent collects it, the key appears in your key list like any other, with **Requested by** under its name showing which key or connected app asked for it. Its status shows when it expires.

A requested key differs from one you create yourself:

- It **expires** at the end of the lifetime you approved, counted from when the agent collected it.
- It **can't be rotated or cloned**, because either would extend a lifetime you approved. If more time is needed, the agent makes a new request.
- You can still **edit its scopes** or **revoke** it at any time.

The approval is also re-checked when the agent collects the key. If you have since been removed from the organization, lost the permission to grant one of the scopes, or the asking key has lost a scope it requested, the key is not issued and the agent must ask again.

## Letting a key make requests

No key can make requests until you allow it. Give a key the **Request API keys** permission (`api.api_keys.request`), either when you create it or later with **Edit scopes**, on **Workspace → API Keys**. Only Owners and Org Admins can grant it.

Give it only to keys that genuinely hand out credentials to other tools, such as an orchestrating agent or a CI pipeline. A key with this permission still can't get anything without your approval.

For an AI agent connected over MCP, the permission is part of what the agent asks for when you connect it. It has it only if you approved **Request API keys** on the consent screen. See [Connect an AI agent](/ai-agents/mcp-server) and [Connected Apps](/api-integrations/connected-apps).


  An integration using its own OAuth client credentials acts for no person, so it can't request keys. Only an API key, or a connection a person approved, can.


## Revoking

A requested key belongs to the key or connection that asked for it:

- **Revoking the asking API key** revokes every key it obtained, at once, and cancels its open requests.
- **Disconnecting the asking app** (from [Connected Apps](/api-integrations/connected-apps), or by an admin) does the same for the keys it obtained.
- **Rotating the asking key** does not affect them: they move to the new key and keep working.

So if you no longer trust an agent, revoke its key or disconnect it, and everything it was given goes with it. To remove just one requested key, revoke that key alone.

## Audit trail

Requests, approvals, denials and the keys they produced are recorded in the [Audit Log](/team/audit-log), with who decided each one, the scopes requested and approved, and the resulting key.


  The calls an agent makes to request, check and collect a key are documented in [Requesting API keys for sub-agents](https://developers.sendops.dev/api-reference/api-key-requests) on the developer docs.