# Opportunities

> Your campaigns with their briefs, compensation, deliverables and every host assignment, so you can track a program from your own systems.

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

An opportunity is a campaign: a brief, the compensation you offered, the deliverables you asked for, and the hosts working on it. Each host's place in the campaign is an assignment, which moves through `DRAFT`, `READY`, `PROPOSED`, `ACTIVE` and `COMPLETED`, or ends at `DECLINED`.

The list gives you each campaign with a count of assignments by status. Retrieve one campaign to get its deliverables and every assignment. Internal comments, decline reasons, invite codes and campaign links stay in the console.

## List opportunities

`GET /api/brand/v1/opportunities`

Your campaigns, newest first, with a count of host assignments in each state.

Scope: `opportunities: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. |
| `status` | csv of enums, optional | Only campaigns in these states. Comma-separated, case-insensitive: `status=active,completed`. One of: `DRAFT`, `READY`, `PROPOSED`, `ACTIVE`, `COMPLETED`, `DECLINED`, `ARCHIVED`. |

**Returns**

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

| Attribute | Type | Description |
| --- | --- | --- |
| `id` | string | The opportunity id (UUID). |
| `title` | string | Campaign title. |
| `description` | string, nullable | The brief hosts read. |
| `project_details` | string, nullable | Longer project notes in the brief. |
| `status` | enum | DRAFT, READY, PROPOSED, ACTIVE, COMPLETED, DECLINED or ARCHIVED. |
| `listing_type` | string, nullable | How the campaign is offered to hosts. |
| `deadline` | date, nullable | When deliverables are due. |
| `application_deadline` | date, nullable | When applications close. |
| `target_url` | string, nullable | Where the campaign sends shoppers. |
| `payment` | object, nullable | The compensation terms you wrote. Only these keys are returned, each when set. |
| `payment.flatFee` | number | A fixed fee per host. |
| `payment.commission` | number | A commission rate, as a percentage. |
| `payment.bonuses` | array | Bonus terms. |
| `payment.terms` | string | Payment terms in prose. |
| `payment.totalPotential` | number | The most a host can earn. |
| `commission_rate` | number, nullable | The campaign’s commission override, as a percentage. |
| `content_types` | array of strings | The content you asked for, such as reel or story. |
| `category` | array of strings | Campaign categories. |
| `attachments` | array of objects | Files attached to the brief. |
| `attachments.url` | string, nullable | File URL. |
| `attachments.filename` | string, nullable | Original file name. |
| `attachments.mime_type` | string, nullable | MIME type. |
| `attachments.file_size_bytes` | integer, nullable | Size in bytes. |
| `assignment_counts` | object | Host assignments by status, such as `{ "ACTIVE": 4, "COMPLETED": 2 }`. Statuses with none are omitted. |
| `created_at` | timestamp | When the campaign was created. |
| `updated_at` | timestamp | When it last changed. |

**Example request**

```bash
curl 'https://api.rendezvu.co/api/brand/v1/opportunities?status=active,completed&per_page=1' \
  -H "Authorization: Bearer $RENDEZVU_BRAND_API_KEY"
```

**Example response**

```json
{
  "success": true,
  "data": [
    {
      "id": "8a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
      "title": "Fall trail series",
      "description": "Run the Ridgeline 30L on a long day out and show us how you pack it.",
      "project_details": "One reel and three stories per host, posted between October 10 and 24.",
      "status": "ACTIVE",
      "listing_type": null,
      "deadline": "2026-10-24",
      "application_deadline": null,
      "target_url": "https://northforkgear.com/products/ridgeline-30",
      "payment": {
        "flatFee": 500,
        "commission": 12,
        "terms": "Paid on approval of all deliverables."
      },
      "commission_rate": 12,
      "content_types": [
        "reel",
        "story"
      ],
      "category": [
        "trail running"
      ],
      "attachments": [],
      "assignment_counts": {
        "ACTIVE": 4,
        "COMPLETED": 2
      },
      "created_at": "2026-09-15T18:20:00.000Z",
      "updated_at": "2026-10-02T09:11:43.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 1,
    "total_items": 9,
    "total_pages": 9,
    "has_next": true,
    "has_prev": false
  },
  "_timing": {
    "duration_ms": 42
  }
}
```

## Retrieve an opportunity

`GET /api/brand/v1/opportunities/{id}`

One campaign with its deliverables and every host assignment. Internal comments, decline reasons, invite codes and campaign links are not included.

Scope: `opportunities:read`.

**Parameters**

| Parameter | Type | Description |
| --- | --- | --- |
| `id` | string, required, path | The opportunity id (UUID). |

**Returns**

An opportunity object, as in List opportunities, with two more arrays.

| Attribute | Type | Description |
| --- | --- | --- |
| `...` | opportunity | Every attribute of the opportunity object above. |
| `deliverables` | array of objects | What each host owes. |
| `deliverables.id` | string | Deliverable id. |
| `deliverables.title` | string | What is due. |
| `deliverables.description` | string, nullable | Detail. |
| `deliverables.due_date` | date, nullable | When it is due. |
| `deliverables.completed_at` | timestamp, nullable | When it was marked done. |
| `assignments` | array of objects | One row per host on the campaign. |
| `assignments.id` | string | Assignment id. |
| `assignments.status` | enum | Where the host is: DRAFT, READY, PROPOSED, ACTIVE, COMPLETED or DECLINED. |
| `assignments.brand_payment_state` | string, nullable | Your side of the payment: NOT_INVOICED, INVOICED, PAYMENT_PENDING, PAID, FAILED or REFUNDED. |
| `assignments.athlete_payment_state` | string, nullable | The host’s payout: NOT_EARNED, EARNED, SCHEDULED_FOR_PAYOUT, PAID, ON_HOLD or FAILED. |
| `assignments.accepted_at` | timestamp, nullable | When the host accepted. |
| `assignments.declined_at` | timestamp, nullable | When the host declined. |
| `assignments.completed_at` | timestamp, nullable | When the assignment completed. |
| `assignments.created_at` | timestamp | When the host was added. |
| `assignments.updated_at` | timestamp | When it last changed. |
| `assignments.host` | object, nullable | The host’s public identity. |
| `assignments.host.id` | string | The host’s Rendezvu user id (UUID). |
| `assignments.host.username` | string, nullable | The host’s handle, as in rendezvu.co/username. |
| `assignments.host.first_name` | string, nullable | First name. |
| `assignments.host.last_name` | string, nullable | Last name. |
| `assignments.host.profile_photo` | string, nullable | URL of the host’s profile photo. |

**Errors**

- `404`: No opportunity with this id belongs to your brand.

**Example request**

```bash
curl 'https://api.rendezvu.co/api/brand/v1/opportunities/8a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d' \
  -H "Authorization: Bearer $RENDEZVU_BRAND_API_KEY"
```

**Example response**

```json
{
  "success": true,
  "data": {
    "id": "8a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
    "title": "Fall trail series",
    "status": "ACTIVE",
    "deadline": "2026-10-24",
    "assignment_counts": {
      "ACTIVE": 1
    },
    "deliverables": [
      {
        "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
        "title": "One Instagram reel",
        "description": "Show the pack on the trail, tag @northforkgear.",
        "due_date": "2026-10-24",
        "completed_at": null
      }
    ],
    "assignments": [
      {
        "id": "f0e1d2c3-b4a5-4968-8776-655443322110",
        "status": "ACTIVE",
        "brand_payment_state": "PAID",
        "athlete_payment_state": "NOT_EARNED",
        "accepted_at": "2026-09-18T14:02:00.000Z",
        "declined_at": null,
        "completed_at": null,
        "created_at": "2026-09-16T10:00:00.000Z",
        "updated_at": "2026-09-18T14:02:00.000Z",
        "host": {
          "id": "6f1c2a9e-3b4d-4e1f-9a8b-2c7d5e6f7a81",
          "username": "jordanalpine",
          "first_name": "Jordan",
          "last_name": "Reyes",
          "profile_photo": "https://media.rendezvu.co/6f1c2a9e_profile.jpg"
        }
      }
    ]
  },
  "_timing": {
    "duration_ms": 42
  }
}
```

## Related

- [Content](https://www.rendezvu.co/docs/api/content.md): The photos, videos and files in your content library, from host deliverables and your own uploads, with short-lived download URLs.
- [Gifts](https://www.rendezvu.co/docs/api/gifts.md): The products you sent to hosts, where each gift stands, the store order behind it, and the feedback the host wrote after using it.

---

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