# Get a campaign's Launchpoint payouts

`GET https://api.tryscouty.com/v1/campaigns/{campaignId}/activation/launchpoint/payouts`

Reads the campaign's Launchpoint program on the brand's own Launchpoint key: the pay held for creators (overdue, due and upcoming), the program's spend, and the Launchpoint wallet's balances. Read only: Launchpoint has no way to pay or approve a payout from outside its dashboard.

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

## Authorization

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

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `campaignId` | `integer` | Required | The campaign whose Launchpoint program this is about. |

## Query parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `creatorHandle` | `string` | Optional | Only this creator's pending payouts, by a social handle Launchpoint knows them by. |

## Request

### cURL

```bash
curl -s https://api.tryscouty.com/v1/campaigns/42/activation/launchpoint/payouts \
  -H "Authorization: Bearer $SCOUTY_TOKEN"
```

### JavaScript

```js
const response = await fetch("https://api.tryscouty.com/v1/campaigns/42/activation/launchpoint/payouts", {
  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/activation/launchpoint/payouts",
    headers={"Authorization": f"Bearer {token}"},
)
print(response.json())
```

## Responses

### 200 OK

```json
{
  "campaignId": 42,
  "program": {
    "id": "prog_acme_spring",
    "name": "Acme Spring"
  },
  "pending": {
    "totalAmount": 450,
    "overdueCount": 0,
    "dueCount": 1,
    "upcomingCount": 2,
    "payouts": [
      {
        "id": "pay_0001",
        "creatorId": "cr_0001",
        "creatorName": "Sample Creator",
        "contractName": "Acme Spring",
        "amount": 150,
        "currency": "usd",
        "status": "due",
        "dueDate": "2026-10-20",
        "deliveredPosts": 3,
        "requiredPosts": 3,
        "readyToPay": true
      }
    ]
  },
  "spend": {
    "spend": 1200,
    "paid": 750,
    "paidOffPlatform": 0,
    "awaiting": 150,
    "tracking": 300
  },
  "wallet": {
    "availableBalance": 2000,
    "pendingBalance": 0,
    "totalOwed": 450,
    "lifetimeDeposits": 5000,
    "lifetimePaidOut": 3000
  },
  "note": "Amounts are in US dollars. The wallet is your whole Launchpoint workspace's; pending payouts and spend are this campaign's program. Scouty can't pay or approve payouts: that is done in Launchpoint."
}
```

### 400 Bad Request

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

### 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
