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

# List Agreements

> List the provider agreements attached to a virtual account group and where each one stands

This endpoint works on any account you own. [Create Virtual Account Group](/fx/api-reference/virtual-account-groups/create-group) covers who can open a group and what the account needs first.

Opening a group with [Create Virtual Account Group](/fx/api-reference/virtual-account-groups/create-group) starts an onboarding that asks the account for two kinds of input: evidence, uploaded with [Upload Document](/fx/api-reference/virtual-account-groups/upload-document), and agreements, the terms the account must accept before the group can be enabled.

This endpoint returns the agreements currently attached to the group, newest first. `status` reflects the provider's record.

Read the terms behind an agreement with [Get Agreement Content](/fx/api-reference/virtual-account-groups/get-agreement-content), and accept or reject it with [Submit Agreement Actions](/fx/api-reference/virtual-account-groups/submit-agreement-actions). The outstanding requirements and the group's onboarding status come from [Get Virtual Account Group](/fx/api-reference/virtual-account-groups/get-group); once the group is enabled you can [create virtual accounts](/fx/api-reference/virtual-accounts/create-virtual-account) under it.

Requires an API key with `read` access on the `virtual_accounts` scope.

## Path Parameters

<ParamField path="account_id" type="string" required>
  The account's external ID (starts with `acct_`)
</ParamField>

<ParamField path="group_id" type="string" required>
  The virtual account group's external ID (starts with `vag_`). It must belong to the account in the path.
</ParamField>

## Query Parameters

<ParamField query="page" type="integer" default="1">
  Page number (minimum 1)
</ParamField>

<ParamField query="size" type="integer" default="10">
  Items per page (1-100)
</ParamField>

## Response

<ResponseField name="items" type="array">
  Agreement objects attached to this group, newest first. There are no sort or filter parameters

  <Expandable title="Agreement Fields">
    <ResponseField name="id" type="string">
      Agreement identifier (starts with `agr_`). Use it in [Get Agreement Content](/fx/api-reference/virtual-account-groups/get-agreement-content) and [Submit Agreement Actions](/fx/api-reference/virtual-account-groups/submit-agreement-actions).
    </ResponseField>

    <ResponseField name="object" type="string">
      Always returns `"agreement"`
    </ResponseField>

    <ResponseField name="title" type="string">
      Title of the agreement, for example `Virtual Account Terms of Service`
    </ResponseField>

    <ResponseField name="description" type="string">
      Longer description of what is being agreed, or `null`
    </ResponseField>

    <ResponseField name="version" type="string">
      Version of the agreement, or `null`
    </ResponseField>

    <ResponseField name="locale" type="string">
      Locale the agreement is written in, for example `en-GB`, or `null`
    </ResponseField>

    <ResponseField name="declinable" type="boolean">
      Whether `reject` is a permitted action. When `false`, the agreement can only be accepted. Rejecting it returns `409`.
    </ResponseField>

    <ResponseField name="content_url" type="string">
      Path of [Get Agreement Content](/fx/api-reference/virtual-account-groups/get-agreement-content) for this agreement, relative to the API host. Call it to list the terms to show before accepting.
    </ResponseField>

    <ResponseField name="status" type="string">
      Agreement status: `pending`, `accepted` or `rejected`. `pending` is the only status that can be acted on.
    </ResponseField>

    <ResponseField name="responded_at" type="string">
      ISO 8601 timestamp when the agreement was accepted or rejected, or `null` while it is `pending`
    </ResponseField>

    <ResponseField name="expires_at" type="string">
      ISO 8601 timestamp after which the agreement can no longer be acted on, or `null` when it does not expire
    </ResponseField>

    <ResponseField name="created" type="string">
      ISO 8601 timestamp when created
    </ResponseField>

    <ResponseField name="updated" type="string">
      ISO 8601 timestamp when last updated
    </ResponseField>

    <ResponseField name="created_by" type="string">
      Actor whose call created the agreement record: the API key id (starts with `ak_`) when opening the group brought it in, or `null` when Hop picked it up during a background refresh
    </ResponseField>

    <ResponseField name="updated_by" type="string">
      Actor that last updated the agreement, or `null`
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="page" type="integer">
  Current page number
</ResponseField>

<ResponseField name="size" type="integer">
  Items per page
</ResponseField>

<ResponseField name="total" type="integer">
  Total number of items
</ResponseField>

<ResponseField name="pages" type="integer">
  Total number of pages
</ResponseField>

## Errors

| Status | `code` | When |
| - | - | - |
| `404` | `RESOURCE_NOT_FOUND` | `group_id` is unknown or belongs to another account |
| `422` | `VALIDATION_ERROR` | `page` or `size` is out of range |

## Request Example

```bash theme={null}
curl "https://api.hopnow.io/v1/accounts/acct_ka44qsvpo8q3wtzuwfqf0h6u/virtual-account-groups/vag_7m2k9x4c1b6v3n8q5z0j2p7t/agreements?size=10" \
  -H "X-API-Key: your_api_key" \
  -H "X-Signature: hmac_signature" \
  -H "X-Timestamp: 1234567890" \
  -H "X-Nonce: abc123"
```

## Response Example

```json theme={null}
{
  "items": [
    {
      "id": "agr_3f8k1m5p9r2t6v4x7z0b3n5q",
      "object": "agreement",
      "title": "Virtual Account Terms of Service",
      "description": "Terms governing virtual accounts opened under this group",
      "version": "2.1",
      "locale": "en-GB",
      "declinable": false,
      "content_url": "/v1/accounts/acct_ka44qsvpo8q3wtzuwfqf0h6u/virtual-account-groups/vag_7m2k9x4c1b6v3n8q5z0j2p7t/agreements/agr_3f8k1m5p9r2t6v4x7z0b3n5q/content",
      "status": "pending",
      "responded_at": null,
      "expires_at": "2026-03-01T00:00:00Z",
      "created": "2026-01-15T10:00:00Z",
      "updated": "2026-01-15T10:00:00Z",
      "created_by": null,
      "updated_by": null
    },
    {
      "id": "agr_10uu44q9ziih39vh89wbeg11",
      "object": "agreement",
      "title": "Data Processing Addendum",
      "description": null,
      "version": "1.0",
      "locale": "en-GB",
      "declinable": true,
      "content_url": "/v1/accounts/acct_ka44qsvpo8q3wtzuwfqf0h6u/virtual-account-groups/vag_7m2k9x4c1b6v3n8q5z0j2p7t/agreements/agr_10uu44q9ziih39vh89wbeg11/content",
      "status": "accepted",
      "responded_at": "2026-01-16T09:12:00Z",
      "expires_at": null,
      "created": "2026-01-15T10:00:00Z",
      "updated": "2026-01-16T09:12:00Z",
      "created_by": null,
      "updated_by": null
    }
  ],
  "page": 1,
  "size": 10,
  "total": 2,
  "pages": 1
}
```
