# Browse Club creators for a campaign

`GET https://api.tryscouty.com/v1/campaigns/{campaignId}/club`

Lists Scouty Club creators who fit one live campaign and are not on it yet, best fit first, 24 a page. Each creator is a card: a first name and last initial, country, niches, platforms, reach and engagement bands, experience and fit. It never gives a handle, a link, a full name or any way to contact a creator: invite them with scouty_invite_creators and Scouty messages them for you. Filters narrow the list; there is no search by name.

- Scope: `creators:read`
- Kind: read
- MCP tool: `scouty_browse_club`

## Authorization

Send `Authorization: Bearer $SCOUTY_TOKEN`. The token needs the `creators:read` scope.

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `campaignId` | `integer` | Required | The live campaign. |

## Query parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `niche` | `string` | Optional | Only creators with one of these niches, comma-separated: Career, College, Productivity, Tech / AI, Finance, Lifestyle, Fitness, Beauty, Fashion, Food, Gaming, Education, Business, Travel, Comedy / Entertainment, Parenting / Family, Wellness, Other. |
| `platform` | `string` | Optional | Only creators with an account on this platform. One of `tiktok`, `instagram`. |
| `country` | `string` | Optional | Only creators with one of these countries (ISO codes), comma-separated: US, CA, GB, AU, NZ. |
| `reach` | `string` | Optional | Only creators with one of these reach bands, comma-separated: nano, micro, mid, macro. |
| `experience` | `string` | Optional | Only creators with one of these experience levels, comma-separated: proven, established, member. |
| `engagement` | `string` | Optional | Only creators with one of these engagement bands, comma-separated: high, typical, low. |
| `fit` | `string` | Optional | Only the campaign's strongest fits, or only the possible ones. One of `matched`, `possible`. |
| `after` | `string` | Optional | nextCursor from the page before, for the next page. |

## Request

### cURL

```bash
curl -s "https://api.tryscouty.com/v1/campaigns/42/club?niche=Beauty&reach=micro" \
  -H "Authorization: Bearer $SCOUTY_TOKEN"
```

### JavaScript

```js
const response = await fetch("https://api.tryscouty.com/v1/campaigns/42/club?niche=Beauty&reach=micro", {
  headers: {
    Authorization: `Bearer ${process.env.SCOUTY_TOKEN}`,
  },
});
console.log(await response.json());
```

### Python

```python
import os

import requests

token = os.environ["SCOUTY_TOKEN"]
response = requests.get(
    "https://api.tryscouty.com/v1/campaigns/42/club",
    headers={"Authorization": f"Bearer {token}"},
    params={"niche": "Beauty", "reach": "micro"},
)
print(response.json())
```

## Responses

### 200 OK

```json
{
  "campaignId": 42,
  "creators": [
    {
      "memberId": 7,
      "displayName": "Sample C.",
      "country": "US",
      "niches": [
        "Beauty",
        "Lifestyle"
      ],
      "platforms": {
        "tiktok": true,
        "instagram": true
      },
      "reach": "micro",
      "engagement": "high",
      "experience": "established",
      "fit": "matched",
      "invite": "none"
    }
  ],
  "nextCursor": null,
  "invitesLeft": 7
}
```

### 400 Bad Request

```json
{
  "error": {
    "code": "invalid_request",
    "message": "Those arguments are not the shape this capability takes: niche."
  }
}
```

### 401 Unauthorized

```json
{
  "error": {
    "code": "missing_token",
    "message": "This API needs an Authorization header carrying a bearer token."
  }
}
```

### 403 Forbidden

```json
{
  "error": {
    "code": "insufficient_scope",
    "message": "This token does not carry the creators:read scope. Ask the team for one that does."
  }
}
```

### 404 Not Found

```json
{
  "error": {
    "code": "not_found",
    "message": "No such campaign."
  }
}
```

### 429 Too Many Requests

```json
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Please wait for the current minute to end."
  }
}
```

## Errors

| Status | `error.code` | Meaning |
|---|---|---|
| 400 Bad Request | `invalid_request` | The request was not the shape this capability takes, or its body was not JSON. |
| 401 Unauthorized | `missing_token`, `invalid_token`, `token_revoked`, `token_expired`, `token_orphaned` | No token, or one that is not recognized, revoked or expired. |
| 403 Forbidden | `insufficient_scope`, `wrong_principal` | The token does not carry the scope this capability needs. |
| 404 Not Found | `not_found` | No such route, or no such campaign for this client. |
| 429 Too Many Requests | `rate_limited` | Too many requests this minute. Retry-After says how long is left. |

Full reference: https://docs.tryscouty.com/reference
