Create/Update Boost (Sponsor)
curl --request POST \
--url https://sdk-api.playcamp.io/v1/server/sponsors \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "<string>",
"creatorKey": "<string>",
"campaignId": "<string>",
"callbackId": "<string>",
"isTest": false
}
'import requests
url = "https://sdk-api.playcamp.io/v1/server/sponsors"
payload = {
"userId": "<string>",
"creatorKey": "<string>",
"campaignId": "<string>",
"callbackId": "<string>",
"isTest": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '<string>',
creatorKey: '<string>',
campaignId: '<string>',
callbackId: '<string>',
isTest: false
})
};
fetch('https://sdk-api.playcamp.io/v1/server/sponsors', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sdk-api.playcamp.io/v1/server/sponsors",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '<string>',
'creatorKey' => '<string>',
'campaignId' => '<string>',
'callbackId' => '<string>',
'isTest' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sdk-api.playcamp.io/v1/server/sponsors"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"creatorKey\": \"<string>\",\n \"campaignId\": \"<string>\",\n \"callbackId\": \"<string>\",\n \"isTest\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sdk-api.playcamp.io/v1/server/sponsors")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"creatorKey\": \"<string>\",\n \"campaignId\": \"<string>\",\n \"callbackId\": \"<string>\",\n \"isTest\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdk-api.playcamp.io/v1/server/sponsors")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"<string>\",\n \"creatorKey\": \"<string>\",\n \"campaignId\": \"<string>\",\n \"callbackId\": \"<string>\",\n \"isTest\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"userId": "<string>",
"campaignId": "<string>",
"creatorKey": "<string>",
"isActive": true,
"sponsoredAt": "2023-11-07T05:31:56Z"
}
}{
"status": 400,
"error": "Bad Request",
"message": "No active campaign found",
"code": "BAD_REQUEST"
}{
"status": 401,
"error": "Unauthorized",
"message": "Invalid API key",
"code": "UNAUTHORIZED"
}{
"status": 404,
"error": "Not Found",
"message": "Creator not found: TEST1",
"code": "NOT_FOUND"
}{
"status": 409,
"error": "Conflict",
"message": "Already sponsoring a creator in this campaign",
"code": "CONFLICT"
}Boost (Sponsor)
Create/Update Boost (Sponsor)
User boosts a creator. Works in upsert mode.
How it works:
- No boost → Create new
- Already boosting same creator → Return current status
- Boosting different creator → Can change after 30-day cooldown
- Boost ended → Reactivate
Payments made after boosting will be attributed to that creator.
POST
/
v1
/
server
/
sponsors
Create/Update Boost (Sponsor)
curl --request POST \
--url https://sdk-api.playcamp.io/v1/server/sponsors \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "<string>",
"creatorKey": "<string>",
"campaignId": "<string>",
"callbackId": "<string>",
"isTest": false
}
'import requests
url = "https://sdk-api.playcamp.io/v1/server/sponsors"
payload = {
"userId": "<string>",
"creatorKey": "<string>",
"campaignId": "<string>",
"callbackId": "<string>",
"isTest": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '<string>',
creatorKey: '<string>',
campaignId: '<string>',
callbackId: '<string>',
isTest: false
})
};
fetch('https://sdk-api.playcamp.io/v1/server/sponsors', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sdk-api.playcamp.io/v1/server/sponsors",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '<string>',
'creatorKey' => '<string>',
'campaignId' => '<string>',
'callbackId' => '<string>',
'isTest' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sdk-api.playcamp.io/v1/server/sponsors"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"creatorKey\": \"<string>\",\n \"campaignId\": \"<string>\",\n \"callbackId\": \"<string>\",\n \"isTest\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sdk-api.playcamp.io/v1/server/sponsors")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"creatorKey\": \"<string>\",\n \"campaignId\": \"<string>\",\n \"callbackId\": \"<string>\",\n \"isTest\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdk-api.playcamp.io/v1/server/sponsors")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"<string>\",\n \"creatorKey\": \"<string>\",\n \"campaignId\": \"<string>\",\n \"callbackId\": \"<string>\",\n \"isTest\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"userId": "<string>",
"campaignId": "<string>",
"creatorKey": "<string>",
"isActive": true,
"sponsoredAt": "2023-11-07T05:31:56Z"
}
}{
"status": 400,
"error": "Bad Request",
"message": "No active campaign found",
"code": "BAD_REQUEST"
}{
"status": 401,
"error": "Unauthorized",
"message": "Invalid API key",
"code": "UNAUTHORIZED"
}{
"status": 404,
"error": "Not Found",
"message": "Creator not found: TEST1",
"code": "NOT_FOUND"
}{
"status": 409,
"error": "Conflict",
"message": "Already sponsoring a creator in this campaign",
"code": "CONFLICT"
}Authorizations
Server API Key (format: {keyId}:{secret})
Body
application/json
User ID
5-character creator key
Pattern:
^[A-Z0-9]{5}$Campaign ID (auto-assigned to active campaign if not specified)
Webhook tracking ID (included in webhook events triggered by this request)
Test mode (does not create actual data)
Response
Success
Show child attributes
Show child attributes
⌘I