---
title: "Verify an act-as delegation grant"
method: POST
path: "/api/v0/act-as-grants/verify"
tags: ["Service Accounts"]
---

# Verify an act-as delegation grant

`POST /api/v0/act-as-grants/verify`

## Request

- Base URL: `https://api.factory.ai`
- URL: `https://api.factory.ai/api/v0/act-as-grants/verify`
- Auth: HTTP bearer

Service-account-only: authenticate with the API key of the service account the grant is bound to, not with the grant itself. Verifies a presented act-as grant and returns the bound operator, plus the shared-session scope when the daemon declares scope support. Used by the daemon the service account owns on connect and on re-verification. Returns 401 when the grant is unknown, revoked, or past its connect expiry (unless reverify is true), or when the operator is no longer active; returns 403 when sharedSessionScope does not match the grant kind or the operator may no longer act through the grant.

## Request body

- VerifyActAsGrantRequestBody
  - `grant` string, required: The act-as grant the client presented to the daemon.
  - `reverify` boolean: Defaults to false. Set to true only when re-verifying an already-connected act-as session: the short connect expiry of the grant is then not enforced, while revocation, service account, and operator checks still apply.
  - `sharedSessionScope` boolean: Defaults to false. Set to true only when the daemon enforces shared-session scopes and the client presented the grant as a shared-session grant. A shared-session grant is accepted only with true and a full grant only with false; a mismatch returns 403.

## Response `200`

Response for status 200

- VerifyActAsGrant200ResponseBody
  - `operatorUserId` string, required
  - `serviceAccountId` string, required
  - `scope` object
    - `kind` 'shared_session', required
    - `sessionId` string, required
    - `mode` 'attach' | 'create', required
    - `sessionSettings` object
      - `model` string
      - `reasoningEffort` 'none' | 'dynamic' | 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'
    - `delegation` object
      - `surface` 'app' | 'droid-api' | 'jira' | 'linear' | 'slack' | 'microsoft-teams' | 'google-chat', required
      - `delegationId` string, required
    - `environmentId` string
  - `operatorName` string
  - `receipt` string

## Other responses

- `400`: Response for status 400
- `401`: Response for status 401
- `402`: Response for status 402
- `403`: Response for status 403
- `413`: The platform edge refused a body over its own size limit before the route ran, for example `Request Entity Too Large` followed by an error code such as `FUNCTION_PAYLOAD_TOO_LARGE`.
- `415`: Response for status 415
- `451`: Response for status 451
- `500`: Response for status 500

## Changes

- **2026-11-12** `b6a46c415079`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/factory/apis/factory-public-api/changes/api/v0/act-as-grants/verify/post.md)

---

[API](https://skmtc.dev/factory/apis/factory-public-api.md) - [All operations](https://skmtc.dev/factory/apis/factory-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/factory/apis/factory-public-api/revisions/c30daf4e3744?raw)
