# Callback Notifications

### Description
Once a Meeting Agent has been provisioned you will be able to receive notifications relating to it. These notifications will be sent as HTTP POST requests to the URI specified when the Meeting Agent was created

### Requesting callbacks
To register for callbacks, populate the `subscriptions` field when either
[provisioning a Meeting Agent for a calendar event](https://docs.cronofy.com/api-reference/conferencing-and-transcription/meeting-agents/provisioning/index.md)
or when [scheduling a Meeting Agent directly](https://docs.cronofy.com/api-reference/conferencing-and-transcription/meeting-agents/schedule/index.md).

Meeting Agents added to [recurring events](https://docs.cronofy.com/api-reference/calendar-control/recurring-events/index.md)
support callbacks via the master event's registration. Each occurrence will notify
via the same callback URL, and the notification will contain the details of the relevant
current occurrence.

### Example callbacks
#### meeting_agent_activated
This notification is fired when a Meeting Agent is preparing to join the meeting.

```http
POST /notification HTTP/1.1
Host: example.com
Content-Type: application/json; charset=utf-8
Cronofy-HMAC-SHA256: {Base64(HmacSHA256(body_bytes, CLIENT_SECRET))}

{
  "notification": {
    "type": "event_subscription",
    "interactions": [
      {
        "type": "meeting_agent_activated"
      }
    ]
  },
  "event": {
    "event_id": "qTtZdczOccgaPncGJaCiLg",
    "summary": "Meeting agent enhanced",
    "start": "2026-10-25T15:30:00Z",
    "end": "2026-10-25T17:00:00Z",
    "tzid": "Europe/Berlin",
    "conferencing": {
      "provider_name": "zoom",
      "join_url": "https://zoom.us/00001111-222"
    },
    "meeting_agent": {
      "profile_id": "cronofy"
    }
  },
  "meeting_agent": {
    "sub": "agt_692702a100ccd07000000000",
    "state": "created",
    "resources": [
      {
        "category": "cronofy",
        "type": "dashboard",
        "url": "https://..."
      }
    ]
  }
}
```

#### meeting_agent_recording_started
This notification is fired when the Meeting Agent has begun recording the
meeting.

```http
POST /notification HTTP/1.1
Host: example.com
Content-Type: application/json; charset=utf-8
Cronofy-HMAC-SHA256: {Base64(HmacSHA256(body_bytes, CLIENT_SECRET))}

{
  "notification": {
    "type": "event_subscription",
    "interactions": [
      {
        "type": "meeting_agent_recording_started"
      }
    ]
  },
  "event": {
    "event_id": "qTtZdczOccgaPncGJaCiLg",
    "summary": "Meeting agent enhanced",
    "start": "2026-10-25T15:30:00Z",
    "end": "2026-10-25T17:00:00Z",
    "tzid": "Europe/Berlin",
    "conferencing": {
      "provider_name": "zoom",
      "join_url": "https://zoom.us/00001111-222"
    },
    "meeting_agent": {
      "profile_id": "cronofy"
    }
  },
  "meeting_agent": {
    "sub": "agt_692702a100ccd07000000000",
    "state": "active",
    "resources": [
      {
        "category": "cronofy",
        "type": "dashboard",
        "url": "https://..."
      }
    ]
  }
}
```

#### meeting_agent_complete
[Meeting Agent resource download](https://docs.cronofy.com/api-reference/conferencing-and-transcription/meeting-agents/resource-download/index.md)
for how to pull a copy of resources into your application as desired.

```http
POST /notification HTTP/1.1
Host: example.com
Content-Type: application/json; charset=utf-8
Cronofy-HMAC-SHA256: {Base64(HmacSHA256(body_bytes, CLIENT_SECRET))}

{
  "notification": {
    "type": "event_subscription",
    "interactions": [
      {
        "type": "meeting_agent_complete"
      }
    ]
  },
  "event": {
    "event_id": "qTtZdczOccgaPncGJaCiLg",
    "summary": "Meeting agent enhanced",
    "start": "2026-10-25T15:30:00Z",
    "end": "2026-10-25T17:00:00Z",
    "tzid": "Europe/Berlin",
    "conferencing": {
      "provider_name": "zoom",
      "join_url": "https://zoom.us/00001111-222"
    },
    "meeting_agent": {
      "profile_id": "cronofy"
    }
  },
  "meeting_agent": {
    "sub": "agt_692702a100ccd07000000000",
    "state": "complete",
    "details": {
      "recording": {
        "duration_seconds": 1620
      }
    },
    "resources": [
      {
        "category": "cronofy",
        "type": "dashboard",
        "url": "https://..."
      },
      {
        "category": "transcript",
        "type": "cronofy",
        "url": "https://..."
      },
      {
        "category": "audio",
        "type": "voice",
        "url": "https://..."
      },
      {
        "category": "video",
        "type": "conference",
        "url": "https://..."
      }
    ]
  }
}
```

#### meeting_agent_failed
The `meeting_agent_failed` callback will include one of a number of subtypes that indicate why the error occurred.

The subtype value can be one of the following list. This list will be expanded over time and consumers should accept other values as unknown errors.

- `meeting_agent_activation_failed` - indicates the Meeting Agent failed to start.

- `meeting_agent_rejected` - The Meeting Agent was rejected from the call due to it
either not being accepted into the meeting, or because rights to record the call
were not granted or could not be requested. For Zoom meetings, the host must have
*Record to computer files* and *Who can request host permission to record? -> External meeting participants*
enabled in their [Zoom profile Recording settings](https://zoom.us/profile/setting#tab-recording).

- `join_timeout` - The Meeting Agent was never accepted into the call from the waiting room.

- `access_denied` - The Meeting Agent was not allowed to begin the join process.

- `meeting_not_found` - The conference call could not be found. This typically means the `join_url` was not valid.

- `internal_error` - A networking or other internal error caused the Meeting Agent to fail

- `no_meeting_activity` - The Meeting Agent joined the call but nobody else ever joined, so it left without recording anything.

- `transcription_failed` - The meeting was recorded but the recording could not be transcribed.

- `meeting_agents_disabled` - The Meeting Agents feature is disabled or unavailable for your application

- `no_meeting_authorization` - We were not able to get a Zoom authorization for the meeting – please see our [Zoom Authorization Flow](https://docs.cronofy.com/developers/meeting-agents/zoom/index.md) documentation.

- `unsupported_meeting_provider` - The `join_url` is not for a supported conferencing provider. Meeting Agents support Google Meet, Microsoft Teams, and Zoom.

```http
POST /notification HTTP/1.1
Host: example.com
Content-Type: application/json; charset=utf-8
Cronofy-HMAC-SHA256: {Base64(HmacSHA256(body_bytes, CLIENT_SECRET))}

{
  "notification": {
    "type": "event_subscription",
    "interactions": [
      {
        "type": "meeting_agent_failed",
        "subtype": "meeting_agent_rejected"
      }
    ]
  },
  "event": {
    "event_id": "qTtZdczOccgaPncGJaCiLg",
    "summary": "Meeting agent enhanced",
    "start": "2026-10-25T15:30:00Z",
    "end": "2026-10-25T17:00:00Z",
    "tzid": "Europe/Berlin",
    "conferencing": {
      "provider_name": "zoom",
      "join_url": "https://zoom.us/00001111-222"
    },
    "meeting_agent": {
      "profile_id": "cronofy"
    }
  },
  "meeting_agent": {
    "sub": "agt_692702a100ccd07000000000",
    "state": "complete",
    "resources": [
      {
        "category": "cronofy",
        "type": "dashboard",
        "url": "https://..."
      }
    ]
  }
}
```



---
[Read in HTML](https://docs.cronofy.com/api-reference/conferencing-and-transcription/meeting-agents/callbacks/)