# Discover Fin's capabilities

Return a machine-readable, per-user list of what Fin can do for a given end user, so an
orchestrating agent can decide which endpoint to call.
The response is audience-matched to the supplied user: each live, API-triggerable
procedure is checked against that user before being included, alongside the static
`reply` and `ask` actions.
To request access to the Fin Agent API, please [fill out this form](https://forms.gle/osy4uyiqyomRCsL2A).

Endpoint: POST /fin/capabilities
Version: 2.16
Security: bearerAuth

## Header parameters:

  - `Intercom-Version` (string)

## Request fields (application/json):

  - `user` (object, required)
    The user to list capabilities for. If no user exists for the id, one is created from the supplied details; if the user already exists, the supplied email and attributes update it.

  - `user.id` (string, required)
    The ID of the user. This value will be used to uniquely identify the user
during a conversation with Fin. Maps to the user_id field on the Intercom User object.
    Example: 123456

  - `user.name` (string)
    The name of the user.
    Example: John Doe

  - `user.email` (string)
    The email of the user.
    Example: john.doe@example.com

## Response 200 fields (application/json):

  - `version` (string)
    The API version the capabilities document was generated for.
    Example: 2.16

  - `capabilities` (array)
    The list of capabilities available to this user.

  - `capabilities.type` (string)
    The kind of capability — `procedure` for a runnable procedure, or a static action such as `reply`, `ask`, or `escalate`.
    Example: procedure

  - `capabilities.id` (string)
    The procedure ID. Present only when `type` is `procedure`.
    Example: 12345

  - `capabilities.name` (string)
    The procedure name. Present only when `type` is `procedure`.
    Example: Reset password

  - `capabilities.description` (string)
    A human-readable description of the capability.
    Example: Walk the user through resetting their password.

  - `capabilities.endpoint` (string)
    The endpoint path to call to use this capability.
    Example: /fin/procedures/12345/run

  - `capabilities.method` (string)
    The HTTP method to use.
    Example: POST

## Response 400 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

## Response 401 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

