# Find board memberships

Find which boards hold an app, up to 25 apps, or one paid ad, with each item id and note.

## Contract status

Preview contract: these routes and tools are implemented in the shared contract, but the public host, customer API access and OAuth flow have not been deployment verified.

## Endpoint: GET /v1/boards/memberships

- Method: `GET`
- Path: `/v1/boards/memberships`
- Authentication: Bearer API credential or OAuth access token
- Required scope: `context:read`
- MCP tool: `boards`
- MCP action: `memberships`

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `storeId` | query | string | no | Numeric App Store id. Send one target form only. |
| `storeIds` | query | string | no | Up to 25 comma-separated App Store ids, for a whole watchlist in one read. |
| `platform` | query | 'meta' | 'tiktok' | no | Advertising platform of the ad. |
| `archiveId` | query | string | no | Archive id of the ad. |

## Known errors

- 400 invalid_request for an invalid filter, identity or limit.
- 401 authentication_required for a missing or invalid credential.
- 402 subscription_required when access is not entitled.
- 403 authorization_required for a missing scope or unavailable preview access.
- 403 workspace_not_accessible when x-genviral-tenancy names a workspace the credential cannot reach.
- 404 not_found when the record is outside the accessible catalogue.
- 429 rate_limited; honor Retry-After when present.

## Request

Name exactly one target form. Use the item ids to remove the app or ad from a board.

```
curl --get 'https://api.peekpanda.com/v1/boards/memberships?storeId=0000000000' \
  --header "Authorization: Bearer $PEEKPANDA_TOKEN" \
  --header 'x-genviral-tenancy: personal'
```

## MCP request

Call boards with action memberships. Path fields go in params, filters in query, and a write body in body.

```
{
  "name": "boards",
  "arguments": {
    "request": {
      "action": "memberships"
    }
  }
}

```

## Response

Every board in the tenancy that holds the target.

```
{
  "data": [
    {
      "boardId": "66666666-6666-4666-8666-666666666666",
      "itemId": "77777777-7777-4777-8777-777777777777",
      "storeId": "0000000000",
      "note": null
    }
  ]
}

```

## Source

Boards are the caller's own organization, stored in PeekPanda. Pinned apps carry the listing name and icon as pinned; evidence counts are stored paid-ad observations.

## Refresh

Board reads and writes never call a provider or start collection. Pinning an app does not watch it; watching stays on the ASO tracked-app list.
