CAWG training and data mining 1.1: notAllowed vs constrained
The CAWG training-and-data-mining assertion has four entries, each allowed, notAllowed or constrained. Constrained with no extra info counts as notAllowed.

The CAWG training and data mining assertion, labelled cawg.training-mining, records whether an asset may be used for data mining, AI inference, generative AI training or other AI training. Each entry takes allowed, notAllowed or constrained, and the specification treats constrained as notAllowed when no further information is given. Sume's docs do not describe writing this assertion into generated files.
The entries and values
Version 1.1 of the specification is dated 16 May 2025. The four entry names below are as listed on the specification page.
| Entry | What it covers | Values |
|---|---|---|
| cawg.data_mining | Data mining of the asset | allowed, notAllowed, constrained |
| cawg.ai_inference | Using the asset as input to a trained AI model | allowed, notAllowed, constrained |
| cawg.ai_generative_training | Training a generative AI model | allowed, notAllowed, constrained |
| cawg.ai_training | Training an AI model | allowed, notAllowed, constrained |
Reading a value safely
The same rule in code: constrained without extra information resolves to notAllowed, so a reader that cannot interpret the extra information should refuse.
import asyncio
ENTRIES = ["cawg.data_mining", "cawg.ai_inference",
"cawg.ai_generative_training", "cawg.ai_training"]
VALUES = {"allowed", "notAllowed", "constrained"}
def effective(value, extra_info=False):
# the spec treats constrained with no extra information as notAllowed
if value not in VALUES:
raise ValueError(value)
return "notAllowed" if value == "constrained" and not extra_info else value
async def main():
for e in ENTRIES:
print(e, effective("constrained"))
asyncio.run(main())What Sume does and does not do
Sume's image API stores caller metadata on the job and sends none of it to the provider. That is your own record of an intent, such as a training preference for a delivered file, but it is not the assertion and no consumer reads it as one.
Where to go next
- Decide the four entries per asset class before delivery.
- Store the decision with the job id.
- Create the signed assertion with a tool that supports CAWG.
Sources
Related posts
More in Use cases
- Check a BFCM ad for price typos: pull frames at the price-card times
Before upload, pull stills at each price-card time with Sume video-frames (up to 24 per call) and compare them with your price sheet. Limits and failure modes.
- Children's story clip from one illustration: Seedance 2.5 or 2.0
Animate one storybook illustration with a Seedance reference image on Sume. A 15 s page is $5.67 on Seedance 2.0 and $8.67 on Seedance 2.5.
- Christmas ad music: an instrumental Lyria brief that sells
A Christmas ad needs music that is festive without vocals under the voiceover. Brief it in one prompt, set the bed under speech and fade it out, with Sume.
- City-localised ad backdrops: one product photo, many cities
Run one product ad in ten cities by changing only the backdrop. A Sume image API loop with a fixed product prompt, per-city results and a cost log, with checks.
Written by Sume