curl --request PUT \
--url https://api.fourthwall.com/open-api/v1.0/gifting/config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"enabled": true,
"entryTimeLimitSeconds": 123,
"shipping": {
"type": "ALL_CREATOR"
},
"products": {
"type": "ALL"
}
}
'import requests
url = "https://api.fourthwall.com/open-api/v1.0/gifting/config"
payload = {
"enabled": True,
"entryTimeLimitSeconds": 123,
"shipping": { "type": "ALL_CREATOR" },
"products": { "type": "ALL" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
entryTimeLimitSeconds: 123,
shipping: {type: 'ALL_CREATOR'},
products: {type: 'ALL'}
})
};
fetch('https://api.fourthwall.com/open-api/v1.0/gifting/config', 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://api.fourthwall.com/open-api/v1.0/gifting/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'enabled' => true,
'entryTimeLimitSeconds' => 123,
'shipping' => [
'type' => 'ALL_CREATOR'
],
'products' => [
'type' => 'ALL'
]
]),
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://api.fourthwall.com/open-api/v1.0/gifting/config"
payload := strings.NewReader("{\n \"enabled\": true,\n \"entryTimeLimitSeconds\": 123,\n \"shipping\": {\n \"type\": \"ALL_CREATOR\"\n },\n \"products\": {\n \"type\": \"ALL\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.fourthwall.com/open-api/v1.0/gifting/config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true,\n \"entryTimeLimitSeconds\": 123,\n \"shipping\": {\n \"type\": \"ALL_CREATOR\"\n },\n \"products\": {\n \"type\": \"ALL\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fourthwall.com/open-api/v1.0/gifting/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"enabled\": true,\n \"entryTimeLimitSeconds\": 123,\n \"shipping\": {\n \"type\": \"ALL_CREATOR\"\n },\n \"products\": {\n \"type\": \"ALL\"\n }\n}"
response = http.request(request)
puts response.read_body{
"enabled": true,
"entryTimeLimitSeconds": 123,
"shipping": {
"type": "ALL_CREATOR"
},
"products": {
"type": "ALL"
},
"platform": "TWITCH"
}Update gifting config
Writes the four creator-controlled gifting rule fields. Validation (duration 20-180s, valid shipping/products) and the one-platform-per-shop mutex are enforced server-side. Upserts: a first-ever PUT materializes the config row.
curl --request PUT \
--url https://api.fourthwall.com/open-api/v1.0/gifting/config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"enabled": true,
"entryTimeLimitSeconds": 123,
"shipping": {
"type": "ALL_CREATOR"
},
"products": {
"type": "ALL"
}
}
'import requests
url = "https://api.fourthwall.com/open-api/v1.0/gifting/config"
payload = {
"enabled": True,
"entryTimeLimitSeconds": 123,
"shipping": { "type": "ALL_CREATOR" },
"products": { "type": "ALL" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
entryTimeLimitSeconds: 123,
shipping: {type: 'ALL_CREATOR'},
products: {type: 'ALL'}
})
};
fetch('https://api.fourthwall.com/open-api/v1.0/gifting/config', 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://api.fourthwall.com/open-api/v1.0/gifting/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'enabled' => true,
'entryTimeLimitSeconds' => 123,
'shipping' => [
'type' => 'ALL_CREATOR'
],
'products' => [
'type' => 'ALL'
]
]),
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://api.fourthwall.com/open-api/v1.0/gifting/config"
payload := strings.NewReader("{\n \"enabled\": true,\n \"entryTimeLimitSeconds\": 123,\n \"shipping\": {\n \"type\": \"ALL_CREATOR\"\n },\n \"products\": {\n \"type\": \"ALL\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.fourthwall.com/open-api/v1.0/gifting/config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true,\n \"entryTimeLimitSeconds\": 123,\n \"shipping\": {\n \"type\": \"ALL_CREATOR\"\n },\n \"products\": {\n \"type\": \"ALL\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fourthwall.com/open-api/v1.0/gifting/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"enabled\": true,\n \"entryTimeLimitSeconds\": 123,\n \"shipping\": {\n \"type\": \"ALL_CREATOR\"\n },\n \"products\": {\n \"type\": \"ALL\"\n }\n}"
response = http.request(request)
puts response.read_body{
"enabled": true,
"entryTimeLimitSeconds": 123,
"shipping": {
"type": "ALL_CREATOR"
},
"products": {
"type": "ALL"
},
"platform": "TWITCH"
}giveaway_writeAPI keys have full access to this endpoint.Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
The gifting rules to save.
Master flag. Off pauses purchasability without losing the rest.
Entry time limit in seconds. Validated 20-180.
- All Creator
- All Creator
- All Creator
- All Winner
- Max Creator
Show child attributes
Show child attributes
- All Products
- All Products
- All Products
- Excluded Products
- Selected Products
Show child attributes
Show child attributes
Response
OK
A shop's saved gifting rules.
Master "gift while live" flag.
Entry time limit in seconds (20-180), maps to the giveaway duration.
- All Creator
- All Creator
- All Creator
- All Winner
- Max Creator
Show child attributes
Show child attributes
- All Products
- All Products
- All Products
- Excluded Products
- Selected Products
Show child attributes
Show child attributes
Current giveaway platform owning the shop's single gifting slot. Read-only conflict signal — TWITCH or STREAMELEMENTS means another integration owns the slot. A Kick shop operates on the OPEN_API slot.
TWITCH, STREAMELEMENTS, OPEN_API, NOT_SELECTED