> ## Documentation Index
> Fetch the complete documentation index at: https://ara-90a60a07.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Ask an agent on the workspace's Reason Network

> Sends a message to an agent on the workspace's Reason Network, carried by a member's online computer (the caller's own when one is online, else the recipient's), and returns its answer when it comes within `wait_seconds`. Recipients see it from `<person>/<client>`. Pass `request_id` to keep waiting for an earlier message's answer. Answers 409 `agent_network_offline` when no computer can carry it.

<sub>Scope: `run`</sub>



## OpenAPI

````yaml /openapi.json post /v3/organizations/{orgId}/agent-network/messages
openapi: 3.1.0
info:
  title: Reason API
  version: 3.0.0
  description: >-
    The Reason HTTP API. Drive cloud software-engineering agents: open sessions
    against your repositories, stream their work, and manage the secrets,
    skills, and automations they run with.


    Authenticate with a Reason API key sent as a bearer token. New keys use
    `reason_`; legacy `ara_` keys remain accepted. Every resource is scoped to
    an organization; resolve your `org_id` once with `GET /v3/self`.
servers:
  - url: https://api.reasonmachines.com
security:
  - reasonApiKey: []
tags:
  - name: Devices
    description: >-
      Owned Mac and headless Device identity, bounded enrollment and root
      grants.
  - name: Machines
    description: >-
      Named Workspace queues served by headless workers. Sessions target a
      Machine by name and wait for a free worker; more workers serve more
      Sessions concurrently.
  - name: Account
    description: Verify a key and resolve the organization it belongs to.
  - name: Feedback
    description: Report problems with the API or these docs to the Reason team.
  - name: Projects
    description: >-
      Retired in favour of Reasons. Existing workspace projects remain readable
      over REST.
  - name: Reasons
    description: >-
      A person's long-running agent conversations: their main Reason and named
      ones. Message a Reason by opening its conversation and sending to that
      Session.
  - name: Sessions
    description: >-
      A session is one run of an agent against a repository: it reproduces the
      task, writes the code, verifies it, and opens a pull request or merge
      request.
  - name: Cloud Access
    description: >-
      Keyless cloud sign-in for sessions: Reason's OIDC issuer facts and the
      AWS, Google Cloud and Azure connections a workspace trusts, including
      which run triggers each one signs in.
  - name: Secrets
    description: >-
      Encrypted credentials injected into the agent's sandbox. Write-only:
      values can be set but never read back.
  - name: Knowledge
    description: >-
      Retired. Workspace notes and knowledge folders have been removed; every
      operation returns 410.
  - name: Memory
    description: >-
      Editable repository notes that are projected into native memory; generated
      memory remains read-only.
  - name: Skills
    description: >-
      Reusable instruction bundles Reason selects semantically from their
      descriptions for matching agent tasks.
  - name: Automations
    description: Recurring or one-time triggers that open sessions on a timetable.
  - name: Change Request Reviews
    description: >-
      Automated senior-engineer reviews posted on pull requests and merge
      requests.
  - name: Repositories
    description: Connected repositories, their indexing state, and generated wikis.
  - name: Git Connections
    description: Linked source-control accounts and the repositories they expose.
  - name: Consumption
    description: 'Billing-aligned usage: daily consumption and billing cycles.'
  - name: Metrics
    description: Aggregate analytics over sessions, change requests, and usage.
  - name: Audit Logs
    description: An append-only record of changes made within the organization.
  - name: Organizations
    description: The top-level tenant. Create, read, update, and delete organizations.
  - name: Members
    description: People in an organization and their pending invites.
  - name: Service Users
    description: Machine principals that own API keys for headless access.
  - name: Roles
    description: Role assignments that govern what each member can do.
  - name: Attachments
    description: >-
      Files uploaded to the organization and shared with sessions, downloaded
      via short-lived signed URLs.
  - name: Guardrails
    description: >-
      Per-repository automation limits and the violations recorded when a limit
      is hit.
  - name: MCP Servers
    description: >-
      Org-level Model Context Protocol servers exposed to the agent. Secret
      values are write-only.
  - name: Settings
    description: 'Organization configuration: namespaced settings and the run tag policy.'
  - name: Blueprints
    description: >-
      Read-only declarative manifests of an organization's agents (identity, run
      config, triggers, suite), with credentials redacted.
  - name: IP Access List
    description: >-
      Source-network allow-list that, when enabled, restricts the organization's
      API surface to a set of CIDR ranges.
  - name: Groups
    description: Manually-curated member groups carrying optional per-day resource limits.
  - name: Provider Credentials
    description: >-
      Configure Bring-Your-Own-Key (BYOK) API keys and subscription credentials
      for model providers. Secret values are write-only.
paths:
  /v3/organizations/{orgId}/agent-network/messages:
    parameters:
      - $ref: '#/components/parameters/orgId'
    post:
      tags:
        - Agent network
      summary: Ask an agent on the workspace's Reason Network
      description: >-
        Sends a message to an agent on the workspace's Reason Network, carried
        by a member's online computer (the caller's own when one is online, else
        the recipient's), and returns its answer when it comes within
        `wait_seconds`. Recipients see it from `<person>/<client>`. Pass
        `request_id` to keep waiting for an earlier message's answer. Answers
        409 `agent_network_offline` when no computer can carry it.


        <sub>Scope: `run`</sub>
      operationId: networkAsk
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                to:
                  description: >-
                    The recipient's address from `networkWho` (person/session),
                    or person/* , repo:NAME or * for several.
                  type: string
                  minLength: 1
                  maxLength: 300
                message:
                  description: The message. Its first line is what recipients see first.
                  type: string
                  minLength: 1
                  maxLength: 30000
                wait_seconds:
                  description: >-
                    How long to wait for the answer, 0 to 300 (default 60). 0
                    returns once the message is sent.
                  type: integer
                  minimum: 0
                  maximum: 300
                request_id:
                  description: >-
                    An earlier call's `request_id`: waits for that message's
                    answer instead of sending a new one.
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                idempotency_key:
                  description: >-
                    The same key on a retried call returns the first call's
                    message instead of sending again.
                  type: string
                  minLength: 1
                  maxLength: 200
      responses:
        '200':
          description: Where the message stands, with its answer when one came.
          content:
            application/json:
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    description: Pass back as `request_id` to keep waiting for the answer.
                  status:
                    type: string
                    enum:
                      - answered
                      - sent
                      - waiting
                      - failed
                    description: >-
                      answered: `answer` holds the reply; sent: delivered, no
                      answer yet; waiting: not yet carried onto the network;
                      failed: see `error`.
                  to:
                    type:
                      - string
                      - 'null'
                  from:
                    description: >-
                      The address the message was sent from, which recipients
                      reply to.
                    type:
                      - string
                      - 'null'
                  recipients:
                    type: array
                    items:
                      type: string
                  answer:
                    type:
                      - object
                      - 'null'
                    properties:
                      id:
                        type: string
                      from:
                        type: string
                      from_agent:
                        type:
                          - string
                          - 'null'
                      body:
                        type: string
                      sent_at:
                        type: string
                    required:
                      - id
                      - from
                      - from_agent
                      - body
                      - sent_at
                  replies:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        from:
                          type: string
                        from_agent:
                          type:
                            - string
                            - 'null'
                        body:
                          type: string
                        sent_at:
                          type: string
                      required:
                        - id
                        - from
                        - from_agent
                        - body
                        - sent_at
                  error:
                    type:
                      - string
                      - 'null'
                required:
                  - request_id
                  - status
                  - to
                  - from
                  - recipients
                  - answer
                  - replies
                  - error
        '400':
          description: Neither `to` and `message` nor `request_id` was given.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: >-
            `request_id` names no message of this caller's
            (`agent_network_not_found`).
        '409':
          description: >-
            No member computer can carry the message (`agent_network_offline`,
            `agent_network_unroutable`).
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - reasonApiKey:
            - run
components:
  parameters:
    orgId:
      name: orgId
      in: path
      required: true
      description: Organization id or slug. Resolve it with `GET /v3/self`.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing, invalid, or expired key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: missing_bearer
            message: Authorization required
    Forbidden:
      description: The key lacks the required scope or role.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: missing_scope
            required_scope: sessions:read
    RateLimited:
      description: >-
        Too many requests. Retry after the number of seconds in the
        `Retry-After` response header.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
          required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: rate_limited
              message: This API key exceeded its request-rate limit
  schemas:
    Error:
      type: object
      properties:
        error:
          oneOf:
            - type: string
            - type: object
              required:
                - type
                - message
              properties:
                type:
                  type: string
                message:
                  type: string
                request_id:
                  type:
                    - string
                    - 'null'
        message:
          type: string
        required_scope:
          type: string
          description: >-
            The capability required when the request was denied for a missing
            scope.
  securitySchemes:
    reasonApiKey:
      type: http
      scheme: bearer
      bearerFormat: 'reason_<hex> (legacy: ara_<hex>)'
      description: >-
        Your Reason API key from Settings > API. New keys use `reason_`; legacy
        `ara_` keys remain accepted. Keys are capability-scoped: run, mcp:read,
        mcp:write, secrets:read, secrets:write, sessions:read, sessions:debug,
        knowledge:read, memory:read, memory:write, skills:read, skills:write,
        repos:read, repos:write, reviews:read, reviews:write, deployment:read,
        analytics:read, org:read, org:write, attachments:read,
        attachments:write, guardrails:read, guardrails:write, network:read,
        network:write, automations:read, automations:write, agent_auth:read.
        network:read and network:write are opt-in, excluded from default keys.
        network:read reads the saved workspace network policy; network:write
        replaces custom allowed hosts and requires a current organization
        owner/admin. Legacy project PATCH requests containing
        network_allowed_hosts also require network:write plus their existing run
        scope and project management permission; saved project hosts do not
        affect current session egress. Only owners/admins can mint or manage
        keys with network:write; keys cannot grant themselves more authority.
        See /docs/network-policies for replacement semantics and runtime
        applicability. mcp:write manages MCP server configuration only; it does
        not authorize remote MCP-tool execution. sessions:read reads sessions,
        including the assistant, reasoning and tool activity in their events.
        sessions:debug is privileged: only for organization owners/admins, it
        expands session events to the full diagnostic projection (diagnostic
        event kinds, status text and raw event metadata).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.