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

# Event payloads

> JSON payloads of every Oimo webhook event: price changes, new resources, terms of service changes, revisions, corrections, removals, renames, new providers and alias groups.

Every payload has `version` (its contract, for example `price-change.v1`), `type` and `id` (equal to the `webhook-id` header; use it to deduplicate, as [Delivery](/webhooks#delivery) describes). Every event below also has `provider`, and `type` is `<event>.<provider>`; the test delivery (`webhook.test`) has no provider. Switch on `version` to parse.

When the change was published: `eligibleAt` on every event except `tos.changed`, which has `firstSeenAt` (when the version was first seen) and, for a version that was approved before publication, `approvedAt`.

Prices are decimal strings in `currency`, never floats. `canonicalResource` is `null` when no canonical id is known. Times are RFC 3339 in UTC. Values shown as `…` or `<sha256>` are abbreviated here.

## price.changed · Price changes

A published price of a resource changed.

`previousPrice` is the price published before this one. `approvedAt` is present when a person approved the new price before it was published; `eligibleAt` is when it was published.

```json price-change.v1 theme={null}
{
  "version": "price-change.v1",
  "type": "price.changed.openai",
  "id": "6f1c0b0e9d1a4c7f8e2b5a3d1c0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e",
  "provider": "openai",
  "source": "openai-docs",
  "resource": "gpt-5",
  "canonicalResource": "openai/gpt-5",
  "dimension": "input",
  "unit": "usd_per_token",
  "previousPrice": "0.000001",
  "price": "0.0000008",
  "currency": "USD",
  "pricingTier": "standard",
  "recordedAt": "2026-08-31T11:00:00.000000Z",
  "runId": "run_01J8Z5Q2W3",
  "contentHash": "b2c9…",
  "eligibleAt": "2026-08-31T11:30:00.000000Z",
  "approvedAt": "2026-08-31T11:30:00.000000Z"
}
```

## resource.added · New resources

A resource (a model, a GPU type, …) was priced for the first time.

Sent once per resource. `prices` holds every price line first recorded for it, sorted by dimension, unit and tier. Price lines added to the resource later (a new tier, a new dimension) do not send another `resource.added`.

```json resource-added.v1 theme={null}
{
  "version": "resource-added.v1",
  "type": "resource.added.openai",
  "id": "<sha256>",
  "provider": "openai",
  "source": "openai-docs",
  "resource": "gpt-6-astra",
  "canonicalResource": "openai/gpt-6-astra",
  "recordedAt": "2026-09-03T20:20:00.000000Z",
  "eligibleAt": "2026-09-03T20:20:00.000000Z",
  "prices": [
    {
      "dimension": "input",
      "unit": "usd_per_token",
      "price": "0.00001",
      "currency": "USD",
      "pricingTier": "standard",
      "recordedAt": "2026-09-03T20:20:00.000000Z",
      "runId": "run_01J8Z5Q2W3",
      "contentHash": "…"
    }
  ]
}
```

## tos.changed · Terms of service changes

A legal document a provider publishes (terms of use, usage policy, …) changed.

`doc` is the document's slug and `url` where it is published. `diffSummary` describes the changed region of the normalized text, or is `null` when no diff was recorded. A version held for review is announced only once approved; the event then carries `approvedAt`.

```json tos-change.v1 theme={null}
{
  "version": "tos-change.v1",
  "type": "tos.changed.anthropic",
  "id": "<sha256>",
  "provider": "anthropic",
  "doc": "usage-policy",
  "url": "https://www.anthropic.com/legal/aup",
  "previousContentHash": "…",
  "contentHash": "…",
  "contentLength": 41230,
  "firstSeenAt": "2026-09-01T06:10:00.500000Z",
  "runId": "run_01J8Z5Q2W3",
  "diffSummary": {
    "identical": false,
    "removedTokens": 3,
    "addedTokens": 5,
    "before": "…",
    "after": "…"
  }
}
```

## price.revised · Price revisions

A price kept its value but another money field changed: its effective date, its canonical resource, its category or a billing condition.

`changed` names the money fields that differ. `previous` and `current` hold every money field each revision has, including the ones that did not change. Changes to descriptive fields only (a display name, notes) are not announced.

```json price-revised.v1 theme={null}
{
  "version": "price-revised.v1",
  "type": "price.revised.openai",
  "id": "<sha256>",
  "provider": "openai",
  "source": "openai-docs",
  "resource": "gpt-5",
  "canonicalResource": "openai/gpt-5",
  "dimension": "input",
  "unit": "usd_per_token",
  "currency": "USD",
  "pricingTier": "standard",
  "price": "0.00000125",
  "contentHash": "…",
  "revisionHash": "…",
  "previousRevisionHash": "…",
  "changed": [
    "effectiveDate"
  ],
  "previous": {
    "effectiveDate": "2026-08-01",
    "serviceCategory": "llm_tokens"
  },
  "current": {
    "effectiveDate": "2026-09-15",
    "serviceCategory": "llm_tokens"
  },
  "revisedAt": "2026-09-30T10:00:00.000000Z",
  "eligibleAt": "2026-09-30T10:00:00.000000Z"
}
```

## price.corrected · Price corrections

A published price was withdrawn because it was wrong, or a withdrawn price was restored.

`revoked` is the withdrawn price and `replacement` the price served in its place now, or `null` when there is none. A restore (the withdrawal itself was the mistake) is a second `price.corrected` with its own `id`: `replacement` is then the restored row (the same `contentHash` as `revoked`) and `restoredAt` is present. Replacing `revoked` with `replacement` gives the right price in both cases.

```json price-corrected.v1 theme={null}
{
  "version": "price-corrected.v1",
  "type": "price.corrected.openai",
  "id": "<sha256>",
  "provider": "openai",
  "source": "openai-docs",
  "resource": "gpt-5",
  "canonicalResource": "openai/gpt-5",
  "dimension": "input",
  "unit": "usd_per_token",
  "currency": "USD",
  "pricingTier": "standard",
  "revoked": {
    "contentHash": "…",
    "price": "0.001",
    "recordedAt": "2026-09-30T09:00:00.000000Z",
    "publishedAt": "2026-09-30T09:00:00.000000Z"
  },
  "revokedAt": "2026-09-30T11:40:00.000000Z",
  "replacement": {
    "contentHash": "…",
    "price": "0.00000125",
    "recordedAt": "2026-09-30T11:40:00.000000Z"
  },
  "eligibleAt": "2026-09-30T11:40:00.000000Z"
}
```

## resource.removed · Removed resources

A resource's price lines were removed: the provider stopped listing it and the removal was confirmed.

Sent only for a confirmed removal, never because a price was not seen for a while. One event per resource and removal; `prices` lists the last published price of each removed line; `lastPrice`, `lastContentHash` and `lastSeenAt` are `null` when no published price of the line is found. When a rename caused the removal the event carries `renamedTo`, and it is sent only to webhooks that do not subscribe to `resource.renamed`.

```json resource-removed.v1 theme={null}
{
  "version": "resource-removed.v1",
  "type": "resource.removed.openai",
  "id": "<sha256>",
  "provider": "openai",
  "source": "openai-docs",
  "resource": "gpt-4.5",
  "canonicalResource": "openai/gpt-4.5",
  "removedAt": "2026-09-30T11:42:00.000000Z",
  "eligibleAt": "2026-09-30T11:42:00.000000Z",
  "prices": [
    {
      "dimension": "input",
      "unit": "usd_per_token",
      "currency": "USD",
      "pricingTier": "standard",
      "lastPrice": "0.000075",
      "lastContentHash": "…",
      "lastSeenAt": "2026-09-29T00:00:00.000000Z"
    }
  ]
}
```

## resource.renamed · Renamed resources

A provider renamed a resource; its price history continues under the new name.

`resource` is the new name and `previousResource` the old one. `prices` pairs each price line of the new name with the old name's line at the same dimension, unit, currency and tier (`null` where one side has none). The new name may already have sent a `resource.added` when it first appeared.

```json resource-renamed.v1 theme={null}
{
  "version": "resource-renamed.v1",
  "type": "resource.renamed.xai",
  "id": "<sha256>",
  "provider": "xai",
  "source": "xai-models",
  "resource": "voice-sts",
  "previousResource": "voice-agent",
  "canonicalResource": null,
  "previousCanonicalResource": null,
  "renamedAt": "2026-10-05T10:00:00.000000Z",
  "eligibleAt": "2026-10-05T10:00:00.000000Z",
  "prices": [
    {
      "dimension": "generation",
      "unit": "usd_per_minute",
      "currency": "USD",
      "pricingTier": "standard",
      "price": "0.08",
      "contentHash": "…",
      "previousPrice": "0.08",
      "previousContentHash": "…"
    }
  ]
}
```

## provider.added · New providers

A provider became available for the first time.

Sent once, to webhooks subscribed to `*` and to webhooks that already list the provider while it is being added. Filters do not apply.

```json provider-added.v1 theme={null}
{
  "version": "provider-added.v1",
  "type": "provider.added.example-gpu",
  "id": "<sha256>",
  "provider": "example-gpu",
  "displayName": "Example GPU",
  "activatedAt": "2026-09-30T11:50:00.000Z",
  "eligibleAt": "2026-09-30T11:50:00.000Z",
  "sources": [
    {
      "key": "example-gpu",
      "kind": "prices"
    },
    {
      "key": "tos-example-gpu-terms",
      "kind": "terms"
    }
  ]
}
```

## alias.member\_added · Alias group: member added

A provider's resource joined an alias group.

`prices` holds every line the resource is priced at now, sorted by source, dimension, unit and tier (empty when it is no longer priced). A resource usually joins its group some hours after its `resource.added`.

```json alias-member-added.v1 theme={null}
{
  "version": "alias-member-added.v1",
  "type": "alias.member_added.azure",
  "id": "<sha256>",
  "alias": {
    "id": "8c4e7b1a-2f3d-4e5a-9b6c-0d1e2f3a4b5c",
    "name": "claude-opus-5.5"
  },
  "provider": "azure",
  "resource": "claude-opus-5-5",
  "canonicalResource": "anthropic/claude-opus-5.5",
  "addedAt": "2026-10-13T19:07:41.000Z",
  "eligibleAt": "2026-10-13T19:07:41.000Z",
  "prices": [
    {
      "source": "azure-retail-api",
      "dimension": "input",
      "unit": "usd_per_token",
      "price": "0.000005",
      "currency": "USD",
      "pricingTier": "global",
      "recordedAt": "2026-10-13T06:20:00.000000Z",
      "runId": "run_01J8Z5Q2W3",
      "contentHash": "…"
    }
  ]
}
```

## alias.member\_removed · Alias group: member removed

A provider's resource left an alias group, or the group was deleted.

`groupDeleted: true` is present when the whole group was deleted (one event per member). This says the grouping changed, not that the provider stopped selling the resource: that is `resource.removed`.

```json alias-member-removed.v1 theme={null}
{
  "version": "alias-member-removed.v1",
  "type": "alias.member_removed.azure",
  "id": "<sha256>",
  "alias": {
    "id": "8c4e7b1a-2f3d-4e5a-9b6c-0d1e2f3a4b5c",
    "name": "claude-opus-5.5"
  },
  "provider": "azure",
  "resource": "claude-opus-5-5",
  "canonicalResource": "anthropic/claude-opus-5.5",
  "removedAt": "2026-10-14T09:12:03.000Z",
  "eligibleAt": "2026-10-14T09:12:03.000Z"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.