Create a manual tip
Add a tip with no payment attached - the same thing as the dashboard’s manual-tip form. It enters the TTS queue (and the media queue when media_url is given) and plays like any other tip, with TTS pre-rendered. Manual tips deliberately skip the word filter (the author is trusted) and don’t touch the leaderboard or tip goal (no money moved). Fires tip.created with source: "api". Requires tips:create.
POST
/tipsAuthorization
AuthorizationBearer token (tp_live_...) · headerrequiredA TipPage API key, created in Dashboard → Settings → Developer.
Request body
requiredapplication/jsonnamestringrequiredThe display name shown on stream.
max length 22
amountnumberrequiredDisplayed amount, in the streamer's currency.
min 0 · max 100000
messagestringmax length 255
media_urlstring<uri>Optional video to queue alongside (YouTube supported).
media_start_timeintegerVideo start offset in seconds.
min 0 · default: 0
Responses
201Tip queued.
successbooleanorder_idstringmedia_queuedbooleanWhether a media item was queued alongside.
400Validation failed (name/amount/message/media URL).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
401Missing or invalid API key (`missing_api_key` / `invalid_api_key`).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
403The key lacks the required scope (`missing_scope`).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
required_scopestring429Rate limit exceeded - check the `RateLimit-*` headers.
errorstringRequest
curl -X POST "https://api.tippage.com/v1/tips" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"amount": 100000,
"message": "string",
"media_url": "http://example.com",
"media_start_time": 0
}'const response = await fetch("https://api.tippage.com/v1/tips", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"name": "string",
"amount": 100000,
"message": "string",
"media_url": "http://example.com",
"media_start_time": 0
})
});import requests
response = requests.post(
"https://api.tippage.com/v1/tips",
headers={
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
json={
"name": "string",
"amount": 100000,
"message": "string",
"media_url": "http://example.com",
"media_start_time": 0
},
)Response
{
"success": true,
"order_id": "api_1755115200000_x1y2z3",
"media_queued": true
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string",
"required_scope": "string"
}{
"error": "string"
}