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

# API Changelog

> Breaking changes and notable updates to the Ground API.

API contract changes are listed newest first. Breaking entries include the fields and client updates required to migrate.

## July 17, 2026

### Canonical list responses and webhook event casing

**Breaking change**

<Warning>
  Update clients that read the removed response aliases before calling the affected endpoints after this release.
</Warning>

We completed the response-pattern migration introduced on July 9. The following endpoints now return list items only under `data` and pagination only through `nextCursor`:

* `GET /v2/wallets/yield-sources`
* `GET /v2/activity`
* `GET /v2/webhooks`
* `GET /v2/webhooks/events`
* `GET /v2/webhooks/{id}/events`

#### List envelope migration

| Removed field  | Read instead          |
| -------------- | --------------------- |
| `yieldSources` | `data`                |
| `activity`     | `data`                |
| `endpoints`    | `data`                |
| `events`       | `data`                |
| `hasMore`      | `nextCursor !== null` |

All affected list responses now use this shape:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": [],
  "nextCursor": null
}
```

When `nextCursor` is non-null, pass it as the next request's `cursor` query parameter. A null value means there are no more pages.

#### Webhook event field migration

Webhook event feed items and their nested `latestEmission` object now use camelCase exclusively. Update clients to read:

* `registrationId`, `eventType`, `attemptCount`, `deliveredAt`, `lastError`, `createdAt`, and `updatedAt` on each event;
* `eventId`, `attemptNumber`, `requestedAt`, `completedAt`, `responseStatus`, `responseMs`, and `errorMessage` from `latestEmission`.

The equivalent snake\_case fields are no longer returned.

#### Required client changes

1. Read every affected list from `response.data`.
2. Replace `response.hasMore` checks with `response.nextCursor !== null`.
3. Replace snake\_case webhook event and delivery-attempt field access with the camelCase names above.
