Request capabilities for accounts, fulfill requirements, and track the enablement lifecycle.

Capabilities move through a lifecycle from `pending` to `enabled`. Each capability has requirements that must be fulfilled before it can be enabled. These include account profile data, [identity verification](https://docs.moov.io/guides/accounts/requirements/identity-verification/), and [underwriting](https://docs.moov.io/guides/accounts/requirements/underwriting/).

Every payment method requires certain capabilities. Visit the [payment methods](https://docs.moov.io/guides/money-movement/payment-methods/) guide for details.

## Request capabilities

You can request capabilities when creating an account or at any point after. The [capabilities reference](https://docs.moov.io/guides/accounts/capabilities/reference/) lists all available capabilities and their use cases.

### Request via API

The following examples demonstrate how to request capabilities after an account has been created.

Ask

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/capabilities" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "capabilities": [\
      "transfers",\
      "send-funds.ach",\
      "collect-funds.ach",\
      "wallet.balance"\
    ]
  }'\
```

Ask

```go
mc, _ := moov.NewClient()

var accountID string

mc.RequestCapabilities(ctx, accountID,
  []moov.CapabilityName{
    moov.CapabilityName_Transfers,
    moov.CapabilityName_SendFundsACH,
    moov.CapabilityName_CollectFundsACH,
    moov.Capability_NameWalletBalance,
  },
)
```

Ask

```javascript
const moov = Moov(token);

const accountID = "accountID";
const capabilities = [\
  "send-funds.ach",\
  "collect-funds.ach"\
];

moov.accounts.capabilities.request({accountID, capabilities});
```

## Requirements

After requesting a capability, Moov determines what requirements must be fulfilled based on the capability type and whether the account is an individual or business.

Requirements fall into two categories:

- **Verification:** Confirms the account holder's identity. This includes basic account data (name, address, tax ID) and may require document uploads. See the [identity verification](https://docs.moov.io/guides/accounts/requirements/identity-verification/) guide.
- **Underwriting:** Assesses the account's risk profile and expected transaction volume. Required for most payment capabilities. See the [underwriting](https://docs.moov.io/guides/accounts/requirements/underwriting/) guide.

The `transfers` capability is automatically enabled with no additional requirements. The `wallet.balance` capability only requires verification.

## Capability lifecycle

Each capability moves through statuses based on whether its requirements have been fulfilled and verified.

| Status       | Description                                                                                           |
|--------------|-------------------------------------------------------------------------------------------------------|
| `pending`    | Capability requested but requirements not yet met. Required information may be missing or verification failed. |
| `in-review`  | All requirements fulfilled. Moov is verifying the information through compliance checks.                |
| `enabled`    | All requirements satisfied and verified. The capability is active and can be used in production.         |
| `disabled`   | Capability turned off. May be due to a Moov compliance action or disabled via API/Dashboard.          |

## Manage capabilities

Track the status of each capability and its requirements with the [capabilities API](https://docs.moov.io/api/moov-accounts/capabilities/) or Dashboard.

### Get capability details

Use the capabilities `GET` [endpoint](https://docs.moov.io/api/moov-accounts/capabilities/list/) to retrieve capabilities for an account.

| Field                           | Description                                                  |
|--------------------------------|--------------------------------------------------------------|
| `capability`                   | The capability key (for example, `collect-funds.ach`)      |
| `status`                       | Current status (`pending`, `in-review`, `enabled`, `disabled`)|
| `requirements.currentlyDue`    | List of outstanding requirements                               |
| `requirements.errors`          | Array of errors encountered during verification               |
| `disabledReason`               | If disabled, the reason (for example, `risk action`)        |
| `createdOn`, `updatedOn`, `disabledOn` | Lifecycle timestamps                               |

Ask

```json
{
  "capability": "collect-funds.ach",
  "accountID": "670356c4-bd3c-414b-9709-c4dc84752902",
  "status": "pending",
  "requirements": {
    "currentlyDue": [
      "document.business.verification"
    ],
    "errors": [
      {
        "requirement": "business.legalname",
        "errorCode": "failed-automatic-verification"
      }
    ]
  },
  "createdOn": "2025-05-13T19:46:53Z",
  "updatedOn": "2025-05-13T19:50:58Z"
}
```

After requesting capabilities, certain business types must provide Moov with a list of [beneficial owners](https://docs.moov.io/guides/accounts/account-types/#beneficial-ownership).

## Webhooks

Set up a `capability.updated` [webhook](https://docs.moov.io/guides/webhooks/webhook-events/#capabilities) to listen for capability status changes. Webhooks enable real-time UI updates or automated handling, such as prompting users to provide missing information.

The Dashboard also displays notices when an account has outstanding requirements.
