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

# emit_delta_strict

> Report an event to Aether and get the reason if it is rejected.

Same as [`emit_delta`](https://documentation.aibydna.com/desp/aether/python-sdk/reporting-deltas/emit_delta), but **raises** on failure instead of returning `None`.

## When to use it

Use `emit_delta_strict` when the caller must react to a rejection, e.g. an MCP tool that reports a schema violation back to the agent so it can fix the payload.

For routine reporting, prefer `emit_delta`.

## Signature

```python theme={null}
async def emit_delta_strict(self, delta: DeltaCreate) -> DeltaAck
```

| Argument | Type | Description |
| - | - | - |
| `delta` | `DeltaCreate` | The event to report. See [`DeltaCreate`](https://documentation.aibydna.com/desp/aether/python-sdk/reporting-deltas/emit_delta#deltacreate). |

## Returns

`DeltaAck`, with `id` and `received_at`.

## Raises

All errors derive from `AetherError`, except a non-serializable payload.

| Error | When | Useful attributes |
| - | - | - |
| `AetherApiError` | Aether answered with a non-2xx status. | `status_code`, `code`, `message` |
| `AetherTimeoutError` | Aether did not answer in time. | `method`, `url`, `timeout` |
| `AetherConnectionError` | Aether could not be reached. | `method`, `url` |
| `AetherResponseError` | A 2xx response was not a valid acknowledgement. | `method`, `url`, `detail` |
| `TypeError` / `ValueError` | The payload is not JSON-serializable. | |

Common `AetherApiError` cases:

| `status_code` | `code` | Meaning |
| - | - | - |
| `401` | `unauthorized` | API key missing, invalid, revoked or expired. |
| `409` | `environment_inactive` | D.E.S.P is disabled for the environment. |
| `422` | `contract_violation` | The payload does not match the event's schema. |
| `429` | | Rate limit exceeded. |

> [!NOTE]
>
> If the event is not yet in the system's contract, Aether adds it automatically. Payloads are validated only for events already declared. See [How Deltas are checked against the contract](https://documentation.aibydna.com/desp/concepts/system-contract.md#how-deltas-are-checked-against-the-contract).

## Example

```python theme={null}
import asyncio

from aether_sdk import AetherApiError, AetherClient, AetherError, DeltaCreate


async def main() -> None:
    client = AetherClient()
    delta = DeltaCreate(
        event="scan.completed",
        workspace_revision="abc123",
        payload={"verification_status": "verified"},
    )

    try:
        ack = await client.emit_delta_strict(delta)
    except AetherApiError as exc:
        print(f"Rejected: {exc.status_code} {exc.code} {exc.message}")
        return
    except AetherError as exc:
        print(f"Aether unavailable: {exc}")
        return

    print(ack.id, ack.received_at)


asyncio.run(main())
```


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