> ## Documentation Index
> Fetch the complete documentation index at: https://playcamp.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 크리에이터 부스트

> Sponsor API를 통한 유저-크리에이터 부스트 관계 관리

유저가 응원하는 크리에이터를 설정합니다. 부스트 설정 후 해당 유저의 결제는 자동으로 크리에이터에게 귀속됩니다.

## POST /sponsors 동작

`POST /sponsors`는 upsert 방식으로 동작합니다:

| 현재 상태          | 요청한 creatorKey | 동작           |
| -------------- | -------------- | ------------ |
| 부스트 없음         | -              | 신규 생성        |
| 같은 크리에이터 부스트 중 | 동일             | 현재 상태 반환     |
| 다른 크리에이터 부스트 중 | 다름             | 30일 쿨다운 후 변경 |
| 부스트 종료됨        | -              | 다시 활성화       |

<Note>
  `POST /sponsors`는 부스트 생성과 변경을 하나의 API로 처리합니다.
</Note>

## 흐름

```
1. 크리에이터 검색/선택  →  2. 부스트 등록 (POST /sponsors)  →  3. 이후 결제 자동 귀속
```

## 부스트 등록

<Info>
  `campaignId`를 지정하지 않으면 현재 활성화된 캠페인으로 자동 귀속됩니다.
</Info>

<Warning>
  한 게임에서 여러 캠페인을 운영하는 경우, 반드시 `campaignId`를 명시하여 캠페인을 구분해야 합니다.
</Warning>

**요청**

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://sandbox-sdk-api.playcamp.io/v1/server/sponsors" \
      -H "Authorization: Bearer ak_server_xxx:secret" \
      -H "Content-Type: application/json" \
      -d '{
        "userId": "user_12345",
        "creatorKey": "ABC12",
        "callbackId": "game-session-abc123"
      }'
    ```
  </Tab>

  <Tab title="Node SDK">
    ```typescript theme={null}
    const sponsor = await server.sponsors.create({
      userId: 'user_12345',
      creatorKey: 'ABC12',
      callbackId: 'game-session-abc123', // optional
    });
    ```
  </Tab>

  <Tab title="Go SDK">
    ```go theme={null}
    sponsor, err := server.Sponsors.Create(ctx, playcamp.CreateSponsorParams{
        UserID:     "user_12345",
        CreatorKey: "ABC12",
        CallbackID: "game-session-abc123", // optional
    })
    ```
  </Tab>
</Tabs>

**응답 (201 Created)**

```json theme={null}
{
  "data": {
    "userId": "user_12345",
    "campaignId": "campaign_001",
    "creatorKey": "ABC12",
    "isActive": true,
    "sponsoredAt": "2024-01-15T10:30:00.000Z"
  }
}
```

## 부스트 해제

`campaignId`를 지정하지 않으면 활성 캠페인의 부스트가 해제됩니다.

**요청**

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE "https://sandbox-sdk-api.playcamp.io/v1/server/sponsors/user/user_12345" \
      -H "Authorization: Bearer ak_server_xxx:secret"
    ```
  </Tab>

  <Tab title="Node SDK">
    ```typescript theme={null}
    await server.sponsors.remove({ userId: 'user_12345' });
    ```
  </Tab>

  <Tab title="Go SDK">
    ```go theme={null}
    err := server.Sponsors.Delete(ctx, "user_12345", nil)
    ```
  </Tab>
</Tabs>

## 선택 파라미터

| 필드           | 타입      | 설명                          |
| ------------ | ------- | --------------------------- |
| `campaignId` | string  | 캠페인 ID (미지정 시 활성 캠페인 자동 귀속) |
| `callbackId` | string  | 웹훅 추적용 ID (웹훅 이벤트에 포함됨)     |
| `isTest`     | boolean | 테스트 모드 (실제 데이터 생성 안 함)      |

## 에러 처리

| HTTP | 코드            | 설명                   | 대응                |
| ---- | ------------- | -------------------- | ----------------- |
| 400  | `BAD_REQUEST` | 활성 캠페인 없음 또는 30일 쿨다운 | 캠페인 상태 확인, 쿨다운 대기 |
| 404  | `NOT_FOUND`   | 크리에이터 없음             | creatorKey 확인     |
