# Declare AI usages

Two usages say what a platform may do with your recordings for generative AI:

| Usage | Name in Labelcamp | What the rights holder allows |
| -- | -- | -- |
| `ai_training` | AI training | Use the recordings to **train** generative AI models. |
| `ai_generation` | AI generation | Let generative AI use a recording as a reference to **produce new works**: covers, remixes, style imitations. |

They sit in the `usage` object, next to the four distribution usages (`download`, `on_demand_stream`, `non_interactive_stream`, `copy_scan`).

Not to be confused with [Declare AI contribution](/tutorials/declare-ai-contribution): a contribution tells the platform that AI was used to **make** the content. A usage tells it what it may **do** with the content. A label can refuse training and still have to declare AI-made releases.

## Not allowed until declared

Both AI usages are `false` until the rights holder explicitly agrees, your catalog predating this feature included. The four distribution usages keep their default of `true`.

Only set one to `true` when the rights holder agreed to that specific use. Do not derive it from another field of your own system.

## Two independent usages

No rule links `ai_training` to `ai_generation`: a rights holder can allow one and refuse the other. Neither depends on the distribution usages either.

## Where to declare them

| Where | Resource | Effect |
| -- | -- | -- |
| Label | [`labels`](../api/labels), `usage` attribute | The default for the label's **new** products. A product's default offer copies it when the product is created. |
| Offer | [`offers`](../api/offers), `usage` attribute | The value for that release. |

Changing a label's usages does not change the offers that already exist. To change existing releases, update their offers.

There is no declaration at the artist, track or artwork level.

## Write semantics

:::warning

`usage` is replaced as a whole. A key you leave out goes back to its default (`true` for distribution, `false` for AI); it does not keep its current value. Read the current `usage`, change the keys you need, and send all six.

:::

```http
PATCH /api/v2/offers/{id}
Content-Type: application/vnd.api+json

{
  "data": {
    "type": "offers",
    "id": "{id}",
    "attributes": {
      "usage": {
        "download": true,
        "on_demand_stream": true,
        "non_interactive_stream": true,
        "copy_scan": true,
        "ai_training": true,
        "ai_generation": false
      }
    }
  }
}
```

The keys inside `usage` use underscores, unlike the attribute names.

## What platforms receive

A usage is sent only to platforms whose delivery format can express it. The other platforms receive nothing for it, and the rest of the delivery is unchanged.

When a platform's format starts supporting a usage, what you already declared is sent to it, without you having to declare it again.
