# Recommendations

> Hosts recommending your products on their public gear lists, with their notes and a host-attributed link per product. Built to render on your site.

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

Recommendations are the hosts who put your products on a public gear list, with what they wrote about each one. Show them on a product page or an athletes page to put real endorsements in front of shoppers.

Each product carries a `link` that credits the host when a shopper buys through it. Use it in place of `url` whenever it is present, so the host who sent the sale gets paid for it.

Render the list on your server, never in the browser, since the key must stay secret. Cache it for a few minutes; recommendations change when a host edits a list, not on every page view.

```javascript
// A server route on your site. Serves the list to your own front end.
let cache = { at: 0, body: null };

export async function GET() {
  if (!cache.body || Date.now() - cache.at > 10 * 60 * 1000) {
    const res = await fetch('https://api.rendezvu.co/api/brand/v1/recommendations?per_page=24', {
      headers: { Authorization: `Bearer ${process.env.RENDEZVU_BRAND_API_KEY}` },
    });
    if (!res.ok) return new Response('Unavailable', { status: 502 });
    cache = { at: Date.now(), body: (await res.json()).data };
  }
  return Response.json(cache.body);
}
```

This endpoint replaced the keyless public feeds. If you used one, see [Retired endpoints](/docs/api/versioning#retired-endpoints).

## List recommendations

`GET /api/brand/v1/recommendations`

Hosts recommending your products on their public gear lists, each with the products, the note they wrote and a host-attributed link. Render it server-side on your site to show who uses your gear.

Scope: `recommendations: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. |

**Returns**

A page of hosts, each with the products of yours they recommend. `data` is an array of objects with these attributes, and the body carries `pagination`.

| Attribute | Type | Description |
| --- | --- | --- |
| `host` | object | The host’s public profile. |
| `host.id` | string | The host’s Rendezvu user id (UUID). |
| `host.username` | string, nullable | The host’s handle, as in rendezvu.co/username. |
| `host.first_name` | string, nullable | First name. |
| `host.last_name` | string, nullable | Last name. |
| `host.profile_photo` | string, nullable | URL of the host’s profile photo. |
| `host.title` | string, nullable | The host’s headline, such as "Ultrarunner and coach". |
| `host.intro` | string, nullable | The host’s public bio. |
| `host.motto` | string, nullable | The host’s motto. |
| `host.discipline` | string, nullable | Primary discipline, such as trail running. |
| `host.specialty` | string, nullable | Specialty within the discipline. |
| `host.location` | string, nullable | City-level location. Never an address. |
| `host.socials` | object, nullable | Public social links, keyed by network: instagram, tiktok, youtube, strava, website, twitter, facebook, linkedin. Only http(s) URLs the host made public; null when there are none. |
| `product_count` | integer | How many of your products this host recommends. |
| `products` | array of objects | The products, as the host listed them. |
| `products.id` | string | The Rendezvu product id. |
| `products.title` | string | Product title. |
| `products.url` | string, nullable | The canonical product page on your store. |
| `products.photo_url` | string, nullable | Product photo. |
| `products.price_min` | number, nullable | Lowest variant price. |
| `products.price_max` | number, nullable | Highest variant price. |
| `products.host_note` | string, nullable | Why the host recommends it, in their words. |
| `products.variant_note` | string, nullable | The size or color the host uses. |
| `products.code` | string, nullable | The product’s Rendezvu short code. |
| `products.link` | string, nullable | A link that credits the host for the sale. Use it in place of `url` when present. |

**Example request**

```bash
curl 'https://api.rendezvu.co/api/brand/v1/recommendations?per_page=1' \
  -H "Authorization: Bearer $RENDEZVU_BRAND_API_KEY"
```

**Example response**

```json
{
  "success": true,
  "data": [
    {
      "host": {
        "id": "6f1c2a9e-3b4d-4e1f-9a8b-2c7d5e6f7a81",
        "username": "jordanalpine",
        "first_name": "Jordan",
        "last_name": "Reyes",
        "profile_photo": "https://media.rendezvu.co/6f1c2a9e_profile.jpg",
        "title": "Ultrarunner and coach",
        "intro": "Mountain miles in the Sierra, every season.",
        "motto": "Start slow, finish strong.",
        "discipline": "Trail running",
        "specialty": "Ultramarathon",
        "location": "Truckee, CA",
        "socials": {
          "instagram": "https://instagram.com/jordanalpine"
        }
      },
      "product_count": 1,
      "products": [
        {
          "id": "5c6d7e8f-9a0b-4c1d-8e2f-3a4b5c6d7e8f",
          "title": "Ridgeline 30L Pack",
          "url": "https://northforkgear.com/products/ridgeline-30",
          "photo_url": "https://media.rendezvu.co/5c6d7e8f_ridgeline.jpg",
          "price_min": 199,
          "price_max": 199,
          "host_note": "Carries everything for a 50K with room for a shell.",
          "variant_note": "Slate, size M",
          "code": "k3x9",
          "link": "https://www.rendezvu.co/p-k3x9?h=jordanalpine"
        }
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 1,
    "total_items": 14,
    "total_pages": 14,
    "has_next": true,
    "has_prev": false
  },
  "_timing": {
    "duration_ms": 42
  }
}
```

## Related

- [Roster](https://www.rendezvu.co/docs/api/roster.md): The hosts you actively work with, with their public profile, commission rate and how many of your campaigns each one has joined.
- [Versioning and changelog](https://www.rendezvu.co/docs/api/versioning.md): The API version is in the path. Additive changes ship into v1; a breaking change would ship as a new version. What changed, and when.

---

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