# Downloading resources

> **BETA**

Meeting Agent resources are commonly discovered as part of a
`meeting_agent_complete` webhook, for example:

```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": {
    ...
  },
  "meeting_agent": {
    "sub": "agt_692702a100ccd07000000000",
    "state": "complete",
    "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://..."
      }
    ]
  }
}
```

The resources are found under the `meeting_agent.resources[]` array. Several
resources are made available and captured as part of a Meeting Agent's
lifecycle.

<table>
  <thead>
      <tr>
          <th>Category</th>
          <th>Type</th>
          <th>Usage</th>
          <th style="text-align: left">Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>cronofy</td>
          <td>dashboard</td>
          <td>Browser</td>
          <td style="text-align: left">Cronofy dashboard URL for the Meeting Agent</td>
      </tr>
      <tr>
          <td>transcript</td>
          <td>cronofy</td>
          <td>API</td>
          <td style="text-align: left">[Transcript for the meeting](/developers/api/meeting-agents/transcripts/index.md)</td>
      </tr>
      <tr>
          <td>audio</td>
          <td>voice</td>
          <td>API</td>
          <td style="text-align: left">Audio recording of the meeting</td>
      </tr>
      <tr>
          <td>video</td>
          <td>conference</td>
          <td>API</td>
          <td style="text-align: left">Video recording of the meeting</td>
      </tr>
  </tbody>
</table>
### Resource download
For those resources accessible via the API, a `GET` request is made for the
URL provided with an [Application Authentication `Authorization` header](/developers/api/authentication/index.md):

> **WARNING:** Whilst the `url` properties of Meeting Agent resources visibly follow a
convention, there is no guarantee this convention will be maintained.

Therefore, `url` properties must be taken from the notification rather than
generated by your code to avoid potential future failures.

```http
GET /resource-url-path HTTP/1.1
Host: {resource-url-host}
Authorization: Bearer {API_KEY}
```

In response, you will receive the details of where the resource can be
downloaded in the form of a presigned object storage URL.

This will be present in the `Location` field and the `resource.download_url`
property of the response body to allow automatic redirects and response body
parsing depending on integrator preference. If your HTTP library is configured
to automatically follow redirects, it will do so and fetch the file directly.

#### Example Response
```http
HTTP/1.1 302 Found
Location: {presigned-object-store-url}
Content-Type: application/json; charset=utf-8

{
  "resource": {
    "category": "transcript",
    "type": "cronofy",
    "url": "{resource-url}",
    "download_url": "{presigned-object-store-url}"
  }
}
```

#### Response Parameters
##### `Location header and resource.download_url` *(required)*

A [`String`](/developers/api/data-types/index.md) for a presigned URL for the
file behind the resource, ie. the video file, audio file, or transcript captured
by the Meeting Agent.

This URL will not require any authentication.

##### `resource.category` *(required)*

A [`String`](/developers/api/data-types/index.md) representing the category of
the resource.

##### `resource.type` *(required)*

A [`String`](/developers/api/data-types/index.md) representing the type of
the resource.

##### `resource.url` *(required)*

A [`String`](/developers/api/data-types/index.md) for the URL of the resource
within the API.



---
[Read in HTML](/developers/api/meeting-agents/resource-download/)