Set the creator that a user supports. After setting a sponsor, the user’s payments are automatically attributed to the creator.
POST /sponsors works as upsert:
| Current State | Requested creatorKey | Behavior |
|---|
| No sponsor | - | Create new |
| Sponsoring same creator | Same | Return current state |
| Sponsoring different creator | Different | Change after 30-day cooldown |
| Sponsor ended | - | Reactivate |
POST /sponsors handles both sponsor creation and changes in one API.
Flow
1. Search/Select creator → 2. Create sponsor → 3. Future payments auto-attributed
If campaignId is not specified, it will be automatically assigned to the currently active campaign.
When operating multiple campaigns for a single game, you must specify campaignId to distinguish between campaigns.
Request
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"
}'
const sponsor = await server.sponsors.create({
userId: 'user_12345',
creatorKey: 'ABC12',
});
sponsor, err := server.Sponsors.Create(ctx, playcamp.CreateSponsorParams{
UserID: "user_12345",
CreatorKey: "ABC12",
})
Response (201 Created)
{
"data": {
"userId": "user_12345",
"campaignId": "campaign_001",
"creatorKey": "ABC12",
"isActive": true,
"sponsoredAt": "2024-01-15T10:30:00.000Z"
}
}
If campaignId is not specified, sponsor from the active campaign will be removed.
Request
curl -X DELETE "https://sandbox-sdk-api.playcamp.io/v1/server/sponsors/user/user_12345" \
-H "Authorization: Bearer ak_server_xxx:secret"
await server.sponsors.remove({ userId: 'user_12345' });
err := server.Sponsors.Delete(ctx, "user_12345", nil)
Error Handling
| HTTP | Code | Description | Action |
|---|
| 400 | BAD_REQUEST | No active campaign or 30-day cooldown | Check campaign status, wait for cooldown |
| 404 | NOT_FOUND | Creator not found | Verify creatorKey |