2.2 KiB
2.2 KiB
Points Redeem Code Protocol (Frontend <-> Backend)
This document defines the redeem-code activation contract for authenticated web users.
Protocol verification status:
- Backend route source:
backend/src/v1/points/router.py - Backend service source:
backend/src/v1/points/service.py - Response schema source:
backend/src/v1/points/schemas.py - Web mapping source:
web/src/lib/api.ts
Compatibility strategy
- Additive evolution only.
- Existing read-only balance/package routes remain backward-compatible.
Route
POST /api/v1/points/redeem-codes/redeem
Redeem a one-time activation code and credit the matching package points to the current account.
Authorization: Requires authenticated session.
Request:
{
"code": "RX8P2N6K4JQW"
}
Field rules:
code: string, normalized uppercase code
Response (200):
{
"packageProductCode": "popular_pack",
"packageName": "常用加量包",
"creditsAdded": 210,
"newBalance": 330,
"redeemedAt": "2026-05-21T12:30:00+00:00"
}
Field rules:
packageProductCode: package mapping key from backend static package configpackageName: current package display label snapshot stored in the redeem code recordcreditsAdded: integer> 0newBalance: integer>= 0redeemedAt: ISO 8601 datetime
Business rules
- Redeem codes are one-time use.
- Redeem codes do not count as a successful recharge for invite reward qualification.
- Redeem crediting is written to points ledger and points audit ledger.
- Redeem activation must also write a system audit log entry.
Error contract linkage
- RFC7807 + extension
code, optionalparams. - Shared registry:
docs/protocols/common/http-error-codes.md. - Error codes for this feature:
REDEEM_CODE_NOT_FOUND(404): Redeem code does not existREDEEM_CODE_ALREADY_REDEEMED(409): Redeem code was already activatedREDEEM_CODE_DISABLED(409): Redeem code is disabled or unavailableREDEEM_CODE_INVALID(422): Redeem code format is invalid
Data model linkage
- Redeem code batches are stored in
redeem_code_batches. - Redeem codes are stored in
redeem_codes. - Package snapshots come from
backend/src/core/config/static/packages/mapping.yaml.