> For the complete documentation index, see [llms.txt](/llms.txt)

# GS2-SerialKey 트랜잭션 액션

검증/소비/입수 각 트랜잭션 액션의 사양




## Verify Action

검증 액션

### Gs2SerialKey:VerifyCodeByUserId

사용자 ID를 지정하여 시리얼 코드의 유효성 확인<br>

지정된 사용자의 시리얼 코드를 소비하지 않고 검증합니다. 특정 캠페인 모델 이름에 대한 검증을 지원하며, 코드가 active(미사용)인지 inactive(사용 완료)인지 확인할 수 있습니다.

**수량 지정 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| code | string |  | ✓|  |  ~ 48자 | 시리얼 코드<br>"XXXXX-XXXX-XXXXX-XXXX-XXXX" 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. |
| campaignModelName | string |  | |  |  ~ 128자 | 캠페인 이름<br>이 시리얼 코드가 속한 캠페인 모델의 이름입니다. 캠페인 정보는 시리얼 코드 자체에 포함되어 있으므로 코드를 사용할 때는 네임스페이스만 지정하면 됩니다. |
| verifyType | 문자열 열거형<br>enum {<br>"active",<br>"inactive"<br>}<br> |  | ✓|  |  | 검증 타입active: 유효 / inactive: 비활성 /  |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2SerialKey:VerifyCodeByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "code": "[string]시리얼 코드",
        "campaignModelName": "[string]캠페인 이름",
        "verifyType": "[string]검증 타입",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2SerialKey:VerifyCodeByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  code: "[string]시리얼 코드"
  campaignModelName: "[string]캠페인 이름"
  verifyType: "[string]검증 타입"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("serialKey").verify.verify_code_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    code="[string]시리얼 코드",
    campaignModelName="[string]캠페인 이름",
    verifyType="[string]검증 타입",
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

## Consume Action

소비 액션

### Gs2SerialKey:UseByUserId

사용자 ID를 지정하여 시리얼 코드 사용 처리<br>

지정된 사용자에 의해 시리얼 코드를 사용 완료로 표시합니다. 코드가 존재하고 아직 사용되지 않았음을 검증합니다.

**수량 지정 가능한 액션: 아니오**

**반전 가능한 액션: 예**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| code | string |  | ✓|  |  ~ 48자 | 시리얼 코드<br>"XXXXX-XXXX-XXXXX-XXXX-XXXX" 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2SerialKey:UseByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "code": "[string]시리얼 코드",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2SerialKey:UseByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  code: "[string]시리얼 코드"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("serialKey").consume.use_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    code="[string]시리얼 코드",
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

## Acquire Action

입수 액션

### Gs2SerialKey:RevertUseByUserId

사용자 ID를 지정하여 시리얼 코드 미사용 처리<br>

사용 완료된 시리얼 코드를 미사용 상태로 되돌립니다. 되돌리기 전에 코드가 현재 사용 완료 상태임을 검증합니다.

**수량 지정 가능한 액션: 아니오**

**반전 가능한 액션: 예**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| code | string |  | ✓|  |  ~ 48자 | 시리얼 코드<br>"XXXXX-XXXX-XXXXX-XXXX-XXXX" 형식의 시리얼 코드 문자열입니다. 각 코드는 고유하며 캠페인 식별 정보를 포함합니다. 코드의 형식과 데이터 길이는 고정되어 있어 변경할 수 없습니다. |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2SerialKey:RevertUseByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "code": "[string]시리얼 코드",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2SerialKey:RevertUseByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  code: "[string]시리얼 코드"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("serialKey").acquire.revert_use_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    code="[string]시리얼 코드",
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

### Gs2SerialKey:IssueOnce

시리얼 코드 1건 발행<br>

시리얼 코드를 1건 즉시 발행합니다. 코드는 AES 암호화와 base32 인코딩을 사용하여 XXXXX-XXXX-XXXXX-XXXX-XXXXX 형식으로 생성됩니다. 배치 발행 작업과 달리 동기적으로 코드를 생성하여 반환합니다.

**수량 지정 가능한 액션: 아니오**

**반전 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| campaignModelName | string |  | ✓|  |  ~ 128자 | 캠페인 모델 이름 |
| metadata | string |  | |  |  ~ 2048자 | 메타데이터<br>메타데이터에는 임의의 값을 설정할 수 있습니다.<br>이 값들은 GS2의 동작에는 영향을 주지 않으므로, 게임 내에서 사용하는 정보를 저장하는 용도로 사용할 수 있습니다. |




**JSON**
```json
{
    "action": "Gs2SerialKey:IssueOnce",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "campaignModelName": "[string]캠페인 모델 이름",
        "metadata": "[string]메타데이터"
    }
}
```

**YAML**
```yaml

action: Gs2SerialKey:IssueOnce
request:
  namespaceName: "[string]네임스페이스 이름"
  campaignModelName: "[string]캠페인 모델 이름"
  metadata: "[string]메타데이터"
```

**GS2-Script**
```lua

transaction.service("serialKey").acquire.issue_once({
    namespaceName="[string]네임스페이스 이름",
    campaignModelName="[string]캠페인 모델 이름",
    metadata="[string]메타데이터",
})
```


---



