> ISPO SDK documentation. [HTML](https://ispo.ai/docs/interfaces/core.CapabilityInvocationRequest.html) · [Documentation index](https://ispo.ai/docs/llms.txt)

# Interface CapabilityInvocationRequest

Caller → host invocation request. `workerProjectId` is the ONLY routing key.

```typescript
interface CapabilityInvocationRequest {
    callerContext?: ProjectInvocationContextClaim;
    capabilityId: string;
    idempotencyKey?: string;
    input: unknown;
    resultChannel: CapabilityResultChannel;
    timeoutMs?: number;
    workerProjectId: string;
}
```

Types: [callerContext](#callercontext), [ProjectInvocationContextClaim](../types/core.ProjectInvocationContextClaim.md), [capabilityId](#capabilityid), [idempotencyKey](#idempotencykey), [input](#input), [resultChannel](#resultchannel), [CapabilityResultChannel](../types/core.CapabilityResultChannel.md), [timeoutMs](#timeoutms), [workerProjectId](#workerprojectid)

##### Index

### <a id="properties"></a>Properties

[callerContext?](#callercontext) [capabilityId](#capabilityid) [idempotencyKey?](#idempotencykey) [input](#input) [resultChannel](#resultchannel) [timeoutMs?](#timeoutms) [workerProjectId](#workerprojectid)

## <a id="properties-1"></a>Properties

### <a id="callercontext"></a>`Optional`callerContext

```typescript
callerContext?: ProjectInvocationContextClaim
```

Types: [ProjectInvocationContextClaim](../types/core.ProjectInvocationContextClaim.md)

### <a id="capabilityid"></a>capabilityId

```typescript
capabilityId: string
```

### <a id="idempotencykey"></a>`Optional`idempotencyKey

```typescript
idempotencyKey?: string
```

Optional caller-scoped replay key. The host treats it as opaque data and rejects blank, control-character, or oversized values at the trust boundary.

### <a id="input"></a>input

```typescript
input: unknown
```

Validated against `descriptor.inputSchema` before any worker dispatch.

### <a id="resultchannel"></a>resultChannel

```typescript
resultChannel: CapabilityResultChannel
```

Types: [CapabilityResultChannel](../types/core.CapabilityResultChannel.md)

One of the executable result channels (all seven are host-routable).

### <a id="timeoutms"></a>`Optional`timeoutMs

```typescript
timeoutMs?: number
```

Client-side RPC budget hint (like `agent.spawn`). The invoke blocks on a human-scale consent hold, so the SDK defaults this well above the ordinary 10s RPC timeout. NOT part of the invocation identity — the host ignores it in routing/consent/dispatch.

### <a id="workerprojectid"></a>workerProjectId

```typescript
workerProjectId: string
```
