# Requests and decisions

How requests get a decision, and what happens next for the agent.

Requests are the input to withHuman. Decisions are the output. Agent instances send requests to withHuman and expect a decision back.

withHuman's job is to convert every request into a decision.

```mermaid
sequenceDiagram
    participant agent as Agent instance
    participant withhuman as withHuman
    participant reviewer as Reviewer

    agent->>withhuman: Request
    withhuman->>withhuman: Approval pipelines check the request
    opt Human review needed
        withhuman->>reviewer: Request appears in review queue
        reviewer-->>withhuman: Approve or deny
    end
    withhuman-->>agent: Decision
```

## Requests

Each request follows the [AAP request format](https://agentapprovalprotocol.io/specification/requests#request) and describes a tool call the agent wants to make.

| What it contains | What it tells you |
| --- | --- |
| **Agent and instance** | Which agent is asking, and which copy of it is doing the work. |
| **Tool** | The tool the agent wants to call, named as the server that defines it names it. |
| **MCP server** (optional) | The MCP server the tool comes from, as the agent's runtime configured it. Built-in tools have none. |
| **Arguments** | The exact inputs the agent wants to pass to that tool. |
| **Time limit** | How long the request can wait for a decision before it expires. |
| **Context** (optional) | Extra details from the adapter about where the call comes from. |
| **Agent reasoning** (optional) | The agent's own explanation of why it wants to take the action. |

When a request enters withHuman, approval pipelines run on it to decide what happens next. Pipelines can use any field on the request to make that decision.

If a request needs human review, that same request is what the reviewer sees in their review queue. They use the details it contains to decide whether to approve or deny it.

## Decisions

A decision is the response withHuman sends back to the agent instance. Whether a pipeline decides automatically or a human reviews the request, the response follows the same [AAP decision format](https://agentapprovalprotocol.io/specification/requests#decision).

| What it contains | What it tells you |
| --- | --- |
| **Outcome** | Whether the request was approved, denied, expired or cancelled. |
| **Decision time** | When the decision was made. |
| **Approval expiry** (approvals only) | When the permission to start the tool call runs out. |
| **Note** (optional) | An explanation or feedback about the decision. |

Approval lets the agent proceed with the tool call. If the request is denied, expires or is cancelled, the agent must not carry out that action.
