> ## Documentation Index
> Fetch the complete documentation index at: https://docs.visitoai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read an action definition

> Requires actions:read. Use the receipt actionId, including custom:, sheets: or http: prefixes. Integration instances share actionId; specify integrationId when ambiguous (409 ACTION_AMBIGUOUS). Returns operation input schemas, including separate Sheets read/write operations. No credentials, destination URLs or internal configuration. This read does not authorize execution.



## OpenAPI

````yaml /openapi.json get /actions/{actionId}
openapi: 3.0.3
info:
  title: Visito M2M API
  version: 1.0.0
  description: >-
    Tenant-scoped server-to-server API for channels, conversations, commerce,
    custom AI tools, and WhatsApp templates. Send operations are asynchronous
    and return queued acknowledgements. Expansion adds conversation controls,
    knowledge, sales opportunities, delivery status, reporting, and signed
    webhooks.
servers:
  - url: https://platform-api.visitoai.com/m2m/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Channels
  - name: Conversations
  - name: Commerce
  - name: Custom tools
  - name: WhatsApp templates
  - name: Properties
  - name: Knowledge
  - name: Sales CRM
  - name: Delivery
  - name: Reporting
  - name: Webhooks
paths:
  /actions/{actionId}:
    get:
      tags:
        - Actions
      summary: Read an action definition
      description: >-
        Requires actions:read. Use the receipt actionId, including custom:,
        sheets: or http: prefixes. Integration instances share actionId; specify
        integrationId when ambiguous (409 ACTION_AMBIGUOUS). Returns operation
        input schemas, including separate Sheets read/write operations. No
        credentials, destination URLs or internal configuration. This read does
        not authorize execution.
      operationId: getAction
      parameters:
        - name: actionId
          in: path
          required: true
          schema:
            type: string
        - name: integrationId
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successful read
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActionDefinitionResponse'
              example:
                action:
                  actionId: http:example-tool
                  integrationId: null
                  family: http
                  name:
                    en: Check a request
                    es: Consultar una solicitud
                  version: null
                  availableVersions: []
                  provider: custom
                  propertyIds:
                    - example-business
                  availability: configured
                  blockers: []
                  playgroundOnly: false
                  operations:
                    - name: check_request
                      readOnly: true
                      inputSchema:
                        type: object
                        properties:
                          requestId:
                            type: string
                        required:
                          - requestId
                        additionalProperties: false
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '409':
          $ref: '#/components/responses/Error'
        '503':
          $ref: '#/components/responses/Error'
components:
  schemas:
    ActionDefinitionResponse:
      type: object
      additionalProperties: false
      properties:
        action:
          $ref: '#/components/schemas/DiscoveredAction'
      required:
        - action
    DiscoveredAction:
      type: object
      additionalProperties: false
      properties:
        actionId:
          type: string
        integrationId:
          type: string
          nullable: true
        family:
          type: string
          enum:
            - integration
            - collection
            - sheets
            - http
        name:
          type: object
          additionalProperties: false
          properties:
            en:
              type: string
            es:
              type: string
          required:
            - en
            - es
        version:
          type: integer
          nullable: true
        availableVersions:
          type: array
          items:
            type: integer
        provider:
          type: string
          nullable: true
        propertyIds:
          type: array
          items:
            type: string
        availability:
          type: string
          enum:
            - configured
            - unavailable
        blockers:
          type: array
          items:
            type: string
        playgroundOnly:
          type: boolean
        operations:
          type: array
          items:
            type: object
            additionalProperties: false
            properties:
              name:
                type: string
              readOnly:
                type: boolean
              inputSchema:
                type: object
                additionalProperties: true
            required:
              - name
        scopeMode:
          type: string
          enum:
            - tenant
            - businesses
          description: >-
            tenant applies throughout this workspace and requires empty
            propertyIds; businesses uses explicitly selected active business
            IDs. Omission preserves legacy scope semantics. Scope is not an
            execution permission.
      required:
        - actionId
        - integrationId
        - family
        - name
        - version
        - availableVersions
        - propertyIds
        - availability
        - blockers
        - operations
    ErrorResponse:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              example: M2M_AUTH_INSUFFICIENT_SCOPE
            message:
              type: string
            details:
              type: object
              additionalProperties: true
      example:
        error:
          code: M2M_AUTH_INSUFFICIENT_SCOPE
          message: M2M credential does not have required scope.
          details:
            requiredScopes:
              - conversations:write
            missingScopes:
              - conversations:write
  responses:
    Error:
      description: Structured error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Visito M2M API key
      description: Server-side tenant-scoped credential created from Build > API Keys.

````

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