# Content

> The photos, videos and files in your content library, from host deliverables and your own uploads, with short-lived download URLs.

- Audience: API
- Page type: reference
- Updated: 2026-10-08
- Canonical URL: https://www.rendezvu.co/docs/api/content

The content library holds what hosts delivered for your campaigns and what your team uploaded. Files sent inside messages are not part of the API.

A list item never carries a file URL. Files live in private storage, so you ask for a download URL when you need the file and fetch it within 300 seconds:

```javascript
const headers = { Authorization: `Bearer ${process.env.RENDEZVU_BRAND_API_KEY}` };
const base = 'https://api.rendezvu.co';

const list = await fetch(`${base}/api/brand/v1/content?media_type=video&per_page=100`, { headers });
for (const item of (await list.json()).data) {
  const link = await fetch(`${base}${item.download_path}`, { headers });
  const { url, filename } = (await link.json()).data;
  const file = await fetch(url);
  // Save file.body as filename in your own storage.
}
```

## List content

`GET /api/brand/v1/content`

Files in your content library: deliverables hosts submitted, and files your team uploaded. Items carry a download path rather than a file URL. Files sent in messages are never listed.

Scope: `content:read`. Paginated.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `page` | integer, optional, default `1` | The page to return, starting at 1. At most 10,000. |
| `per_page` | integer, optional, default `25` | Items per page, between 1 and 100. |
| `source` | csv of enums, optional | Where the file came from. Both when omitted. One of: `deliverable`, `upload`. |
| `media_type` | csv of enums, optional | Only these kinds of file. One of: `image`, `video`, `audio`, `document`, `other`. |
| `opportunity_id` | csv of strings, optional | Only content from these campaigns (up to 50 UUIDs). |
| `host_id` | csv of strings, optional | Only content from these hosts (up to 50 UUIDs). |
| `uploaded_after` | date, optional | Only files added on or after this ISO 8601 date or timestamp. |
| `uploaded_before` | date, optional | Only files added before this ISO 8601 date or timestamp. |
| `sort` | enum, optional, default `newest` | Order by when the file was added. One of: `newest`, `oldest`. |

**Returns**

A page of content items. `data` is an array of objects with these attributes, and the body carries `pagination`.

| Attribute | Type | Description |
| --- | --- | --- |
| `id` | string | The item id. |
| `source` | enum | `deliverable` or `upload`. |
| `media_type` | enum | image, video, audio, document or other. |
| `filename` | string, nullable | File name. |
| `mime_type` | string, nullable | MIME type. |
| `file_size_bytes` | integer, nullable | Size in bytes. |
| `created_at` | timestamp | When the file was added. |
| `uploaded_by` | enum | Who added it, relative to you: `host`, `brand` (your team), or `peer_brand` (another brand on a shared campaign). |
| `host` | object, nullable | The host the file belongs to. |
| `host.id` | string | Host user id. |
| `host.username` | string, nullable | Handle. |
| `host.name` | string, nullable | Display name. |
| `opportunity` | object, nullable | The campaign the file was delivered for. |
| `opportunity.id` | string | Opportunity id. |
| `opportunity.title` | string | Campaign title. |
| `opportunity.assignment_id` | string, nullable | The host’s assignment. |
| `opportunity.assignment_status` | string, nullable | Its status. |
| `deliverable` | object, nullable | The deliverable the file answers. |
| `deliverable.id` | string | Deliverable id. |
| `deliverable.title` | string | What was due. |
| `deliverable.due_date` | date, nullable | When it was due. |
| `download_path` | string | The path to call for a download URL. See Retrieve a download URL. |

**Example request**

```bash
curl 'https://api.rendezvu.co/api/brand/v1/content?source=deliverable&media_type=video&per_page=1' \
  -H "Authorization: Bearer $RENDEZVU_BRAND_API_KEY"
```

**Example response**

```json
{
  "success": true,
  "data": [
    {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "source": "deliverable",
      "media_type": "video",
      "filename": "ridgeline-reel-final.mp4",
      "mime_type": "video/mp4",
      "file_size_bytes": 48213990,
      "created_at": "2026-10-03T21:15:08.000Z",
      "uploaded_by": "host",
      "host": {
        "id": "6f1c2a9e-3b4d-4e1f-9a8b-2c7d5e6f7a81",
        "username": "jordanalpine",
        "name": "Jordan Reyes"
      },
      "opportunity": {
        "id": "8a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
        "title": "Fall trail series",
        "assignment_id": "f0e1d2c3-b4a5-4968-8776-655443322110",
        "assignment_status": "ACTIVE"
      },
      "deliverable": {
        "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
        "title": "One Instagram reel",
        "due_date": "2026-10-24"
      },
      "download_path": "/api/brand/v1/content/deliverable/e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b/download"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 1,
    "total_items": 27,
    "total_pages": 27,
    "has_next": true,
    "has_prev": false
  },
  "_timing": {
    "duration_ms": 42
  }
}
```

## Retrieve a download URL

`GET /api/brand/v1/content/{source}/{item_id}/download`

A signed URL for one file, valid for 300 seconds. The response is JSON, not a redirect, so your code decides when to fetch the file. Ask for a new URL each time; do not store one.

Scope: `content:read`.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `source` | enum, required, path | The item’s `source`. One of: `deliverable`, `upload`. |
| `item_id` | string, required, path | The item’s `id` (UUID). |

**Returns**

A short-lived URL and the file’s name and type.

| Attribute | Type | Description |
| --- | --- | --- |
| `url` | string | A signed HTTPS URL for the file. |
| `expires_in_seconds` | integer | How long the URL works. Always 300. |
| `filename` | string, nullable | File name, for saving. |
| `mime_type` | string, nullable | MIME type. |

**Errors**

- `404`: No such item in your library, or `source` is not deliverable or upload.

**Example request**

```bash
curl 'https://api.rendezvu.co/api/brand/v1/content/deliverable/e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b/download' \
  -H "Authorization: Bearer $RENDEZVU_BRAND_API_KEY"
```

**Example response**

```json
{
  "success": true,
  "data": {
    "url": "https://rendezvu-files.s3.amazonaws.com/deliverables/ridgeline-reel-final.mp4?X-Amz-Expires=300&X-Amz-Signature=...",
    "expires_in_seconds": 300,
    "filename": "ridgeline-reel-final.mp4",
    "mime_type": "video/mp4"
  },
  "_timing": {
    "duration_ms": 42
  }
}
```

## Related

- [Opportunities](https://www.rendezvu.co/docs/api/opportunities.md): Your campaigns with their briefs, compensation, deliverables and every host assignment, so you can track a program from your own systems.

---

Source: https://www.rendezvu.co/docs/api/content (Rendezvu docs, Markdown view). Every page: https://www.rendezvu.co/llms.txt