---
title: "List available features"
description: "Retrieve features based on the provided parameters. If you omit customer_id from the request, the endpoint returns all available features and their requirements. If you include customer_id, the endpoint returns the customer’s features and their activation status."
protocol: rest
method: GET
endpoint: "/v1/risk/features"
baseUrl: "https://api.gravv.xyz"
group: "Features"
auth:
  label: "Api-Key"
  name: "Api-Key"
  in: header
---

# List available features

<Endpoint method="GET" path="/v1/risk/features" />

Retrieve features based on the provided parameters. If you omit customer_id from the request, the endpoint returns all available features and their requirements. If you include customer_id, the endpoint returns the customer’s features and their activation status.

## Query Parameters

<ParamField name="customer_id" query="customer_id" type="string">
  Optional customer ID. When provided, the response includes features specific to that customer along with their activation status. When omitted, or if the customer ID isn’t found, the response returns the global list of available features.
</ParamField>

<ParamField name="country" query="country" type="string">
  ISO 3166-1 alpha-2 country code. When provided, the response is filtered to features available in that country. Can be combined with `customer_id` to get country-specific features for a customer.
</ParamField>

<ParamField name="status" query="status" type="string" default="all">
  Filter features by activation status

  Possible values: `active`, `inactive`, `all`
</ParamField>

## Responses

| Status | Description |
| --- | --- |
| `200` | Features retrieved successfully |
| `400` | Bad request - Invalid or missing required data |
| `401` | Unauthorized - Invalid or missing API key |
| `403` | Forbidden - Customer not eligible |
| `404` | Feature or customer not found |

### 200 response

<ResponseField name="data" type="object" required>

  <Expandable title="properties">
    <ResponseField name="customer_id" type="string" required>
      Unique identifier for the customer
    </ResponseField>

    <ResponseField name="features" type="object[]" required>
      List of available features with their requirements

      <Expandable title="properties">
        <ResponseField name="feature_id" type="string">
          Unique identifier for the feature
        </ResponseField>

        <ResponseField name="name" type="string">
          Human-readable name of the feature
        </ResponseField>

        <ResponseField name="description" type="string">
          Detailed explanation of the feature
        </ResponseField>

        <ResponseField name="activated" type="boolean">
          Whether the feature is currently activated for the customer
        </ResponseField>

      </Expandable>
    </ResponseField>

  </Expandable>
</ResponseField>

<ResponseField name="error" type="string" required>
</ResponseField>

<ResponseExample>

```json title="AllFeatures"
{
  "data": {
    "customer_id": "302dabcb-d4fd-4a00-a80b-afad70982614",
    "features": [
      {
        "feature_id": "crypto_wallet",
        "name": "Wallet",
        "description": "Create and manage wallets",
        "activated": false
      },
      {
        "feature_id": "eur_account",
        "name": "EUR Account",
        "description": "Create and manage EUR currency accounts",
        "activated": false
      },
      {
        "feature_id": "international_transfers",
        "name": "Payout",
        "description": "Send and receive international wire transfers",
        "activated": false
      },
      {
        "feature_id": "usd_account",
        "name": "USD Account",
        "description": "Create and manage USD currency accounts",
        "activated": false
      },
      {
        "feature_id": "virtual_cards",
        "name": "Cards",
        "description": "Issue and manage debit/credit cards",
        "activated": false
      }
    ]
  },
  "error": null
}
```

```json title="SpecificCustomer"
{
  "data": {
    "customer_id": "302dabcb-d4fd-4a00-a80b-afad70982614",
    "features": [
      {
        "feature_id": "crypto_wallet",
        "name": "Wallet",
        "description": "Create and manage wallets",
        "activated": true
      },
      {
        "feature_id": "eur_account",
        "name": "EUR Account",
        "description": "Create and manage EUR currency accounts",
        "activated": true
      },
      {
        "feature_id": "international_transfers",
        "name": "Payout",
        "description": "Send and receive international wire transfers",
        "activated": false
      },
      {
        "feature_id": "usd_account",
        "name": "USD Account",
        "description": "Create and manage USD currency accounts",
        "activated": true
      },
      {
        "feature_id": "virtual_cards",
        "name": "Cards",
        "description": "Issue and manage debit/credit cards",
        "activated": true
      }
    ]
  },
  "error": null
}
```

</ResponseExample>

### 400 response

<ResponseField name="data" type="any" required>
  Always null for error responses
</ResponseField>

<ResponseField name="error" type="string" required>
  Human-readable error message
</ResponseField>

<ResponseExample>

```json title="missing_data"
{
  "data": null,
  "error": "annual_remuneration is required and must be a number"
}
```

```json title="invalid_data"
{
  "data": null,
  "error": "estimated_monthly_limit must be a positive number"
}
```

</ResponseExample>

### 401 response

<ResponseField name="data" type="any" required>
  Always null for error responses
</ResponseField>

<ResponseField name="error" type="string" required>
  Human-readable error message
</ResponseField>

<ResponseExample>

```json title="Response"
{
  "data": null,
  "error": "Invalid or missing Api-Key header. Api-Key is required!"
}
```

</ResponseExample>

### 403 response

<ResponseField name="data" type="any" required>
  Always null for error responses
</ResponseField>

<ResponseField name="error" type="string" required>
  Human-readable error message
</ResponseField>

<ResponseExample>

```json title="Response"
{
  "data": null,
  "error": "Customer does not meet eligibility requirements"
}
```

</ResponseExample>

### 404 response

<ResponseField name="data" type="any" required>
  Always null for error responses
</ResponseField>

<ResponseField name="error" type="string" required>
  Human-readable error message
</ResponseField>

<ResponseExample>

```json title="Response"
{
  "data": null,
  "error": "Feature not found"
}
```

</ResponseExample>

## Authorization

- **ApiKeyAuth**
