# Media kits, link in bio, and decks

> Work with the supported CreatorsJet publishing resources through Public API V1.
>
> Canonical URL: https://docs.creatorsjet.com/api/content-pages

Public API V1 exposes a deliberately small publishing surface: ensure and retrieve default media kits, manage one creator link-in-bio page, and manage agency pitch decks.

## Media kits

Creator and agency keys can ensure, list, and retrieve visible media kits.

For a creator key, omit `creator_id`; the creator is inferred from the key:

```bash
curl https://api.creatorsjet.com/public/v1/media-kits \
  --request POST \
  --header "Authorization: Bearer $CREATORSJET_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: $IDEMPOTENCY_KEY" \
  --data '{}'
```

For an agency key, supply a creator already in the agency roster:

```json
{
  "creator_id": "66b0f51d46071dc43b2db103"
}
```

The endpoint returns `201` when it creates the default kit and `200` when it returns the existing kit. Repeated calls do not create customizable or duplicate kits.

Public API V1 does not edit kit blocks, themes, analytics configuration, publication settings, or platform synchronization.

## Link in bio

Link-in-bio management is creator-only. Call `GET /link-in-bio` before choosing whether to create or update the page.

Create the creator's single page with a public slug:

```bash
curl https://api.creatorsjet.com/public/v1/link-in-bio \
  --request POST \
  --header "Authorization: Bearer $CREATORSJET_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: $IDEMPOTENCY_KEY" \
  --data '{
    "slug": "maria-links",
    "username": "Maria",
    "bio": "Fashion creator and stylist",
    "social_links": [
      { "platform": "instagram", "handle_or_url": "@maria" }
    ],
    "blocks": [
      {
        "client_id": "portfolio",
        "type": "link",
        "title": "My portfolio",
        "url": "https://maria.example.com",
        "visible": true,
        "order": 0
      }
    ]
  }'
```

New blocks require a stable `client_id`. Keep that value in your system and reuse it when retrying the same operation. Existing blocks are selected by their returned `id`.

`PATCH /link-in-bio` changes only supplied page fields and blocks. Omitting a field leaves it unchanged. V1 supports `link`, `title`, and `text` blocks; it does not delete blocks, upload media, configure custom domains, or expose the complete designer.

Social links on a link-in-bio page are presentation links. They do not attach or remove the creator's underlying CreatorsJet social accounts.

## Pitch decks

Pitch decks are agency-only. Every `creator_id` selected for a deck must belong to the authenticated agency's roster.

Create a deck with `POST /decks`:

```bash
curl https://api.creatorsjet.com/public/v1/decks \
  --request POST \
  --header "Authorization: Bearer $CREATORSJET_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: $IDEMPOTENCY_KEY" \
  --data '{
    "slug": "summer-creators",
    "title": "Summer creator shortlist",
    "bio": "Creators selected for the summer launch.",
    "contact_email": "partnerships@agency.example",
    "creator_ids": ["66b0f51d46071dc43b2db103"],
    "tags": ["summer", "fashion"],
    "visibility": "link"
  }'
```

`PATCH /decks/{deck_id}` changes only supplied fields, except `creator_ids`, which replaces the deck's complete creator selection when provided.

For private visibility, provide a password in the same write. Passwords are write-only and never returned. The response reports only `has_password`.

Deck creation applies the agency's current deck allowance. V1 does not upload pictures or covers, ingest remote images, delete decks, or implicitly add creators to the roster.

## Use returned URLs

Media-kit, link-in-bio, and deck responses include editor and public share URLs where applicable. Use those returned URLs instead of constructing frontend routes in your integration.

For exact field constraints, themes, CTA values, visibility behavior, and response schemas, use the [generated endpoint reference](/api/reference).
