
🏠 บ้าน
สร้างความหวัง
ช่วยให้ทุกครอบครัวมีที่ที่เรียกว่าบ้าน — สนับสนุนผ่าน OseloHelp.com องค์กรไม่แสวงกำไรที่ได้รับยกเว้นภาษีของเรา
Global Music Distribution Coming Soon!
การเชื่อมต่อครั้งแรกของคุณจบได้ในหน้าจอเดียว
เปิดที่อยู่นี้ในเบราว์เซอร์ของคุณ คุณจะเห็นอีเวนต์ตัวอย่างทันที
https://timtim.live/api/partner-network/demo?city=Washingtonลงชื่อเข้าใช้ บอกเราว่าคุณเป็นใคร แล้วกด สร้างคีย์ทดสอบ คีย์จะขึ้นต้นด้วย tt_test_ และเห็นแค่อีเวนต์ตัวอย่าง
ขออีเวนต์ในเมืองที่ต้องการ
curl "https://api.timtim.live/v1/events?city=Washington&category=music" \
-H "Authorization: Bearer tt_test_YOUR_KEY"ทุกอีเวนต์มีชื่อ วันที่ สถานที่ รูป ราคา และป้ายข้อความพร้อมใช้สำหรับการ์ดของคุณ
ใช้ buy_url ที่เราให้ แค่นั้นเอง TimTim.Live บันทึกว่ายอดขายมาจากใครไว้ในลิงก์นั้นแล้ว
ดูจำนวนคนที่คุณส่งไป ตั๋วที่ขายได้ และรายได้บนแดชบอร์ด หรือขอผ่าน API ก็ได้
GET https://api.timtim.live/v1/earningshttps://api.timtim.live/v1ส่งคีย์ของคุณในเฮดเดอร์ Authorization คีย์ทดสอบ (tt_test_) เห็นแค่อีเวนต์ตัวอย่าง คีย์เว็บไซต์ (tt_pk_live_) ใส่ในหน้าเว็บได้และอ่านได้แค่อีเวนต์ คีย์เซิร์ฟเวอร์ (tt_sk_live_) อยู่บนเซิร์ฟเวอร์ของคุณและอ่านรายได้ได้ด้วย เราแสดงคีย์แค่ครั้งเดียว — เก็บไว้ให้ดี
curl "https://api.timtim.live/v1/events?city=Washington&category=music" \
-H "Authorization: Bearer tt_test_YOUR_KEY"const res = await fetch("https://api.timtim.live/v1/events?city=Washington&category=music", {
headers: { Authorization: "Bearer tt_test_YOUR_KEY" },
});
const { events, next } = await res.json();
for (const event of events) {
console.log(event.name, event.display.date_label, event.tickets.buy_url);
}// Node 18+ — keep server keys (tt_sk_live_) on the server
const res = await fetch("https://api.timtim.live/v1/events?city=Washington", {
headers: { Authorization: `Bearer ${process.env.TIMTIM_KEY}` },
});
if (!res.ok) {
const problem = await res.json();
throw new Error(`${problem.title} (${problem.request_id})`);
}
const { events } = await res.json();import os, requests
res = requests.get(
"https://api.timtim.live/v1/events",
params={"city": "Washington", "category": "music"},
headers={"Authorization": f"Bearer {os.environ['TIMTIM_KEY']}"},
)
res.raise_for_status()
for event in res.json()["events"]:
print(event["name"], event["tickets"]["buy_url"])<?php
$ch = curl_init("https://api.timtim.live/v1/events?city=Washington&category=music");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer " . getenv("TIMTIM_KEY")]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
foreach ($data["events"] as $event) {
echo $event["name"] . " " . $event["tickets"]["buy_url"] . PHP_EOL;
}citycountrycategoryfromtochanged_sincecommissionedminimum_earningsnearlimitจดเวลาที่ซิงก์ครั้งล่าสุด แล้วส่งเป็น changed_since คุณจะได้แค่อีเวนต์ที่เปลี่ยน — รวมถึงที่ถูกยกเลิกและตั๋วหมด ไม่ต้องใช้ webhook อีเวนต์ที่คุณต้องหยุดแสดงจะมาในรายการ withdrawn
GET https://api.timtim.live/v1/events?changed_since=2026-10-06T10:00:00Zถ้าคำตอบมี next ให้ส่งกลับมาเป็น cursor= เพื่อรับหน้าถัดไป เมื่อ next ว่าง แปลว่าคุณได้ครบแล้ว
GET https://api.timtim.live/v1/events?city=Paris&cursor=eyJtIjoiZCIs…ทุกอีเวนต์มี earn ถ้า earn.eligible เป็น false อีเวนต์นั้นไม่มีรางวัล — แต่ก็ยังน่าแสดง ถ้าเป็น true จะมี earn.description บอกว่าคุณได้อะไร เช่น "$5 ต่อตั๋วที่มีสิทธิ์หนึ่งใบ" ถ้าการซื้อถูกคืนเงิน รางวัลจะถูกหักคืน
บันทึกฟีดแบบรวมบนแดชบอร์ด แล้วดาวน์โหลดทุกอีเวนต์ในฟีดนั้นเป็นไฟล์บีบอัดไฟล์เดียว: GET /v1/bulk/FEED_ID.ndjson.gz หรือ .csv.gz ด้วยคีย์เซิร์ฟเวอร์ของคุณ เพิ่ม ?changed_since= เพื่อรับเฉพาะสิ่งที่เปลี่ยน รวมถึงอีเวนต์ที่ถูกถอดออก คีย์ทดสอบลองใช้ได้ตอนนี้ ส่วนการใช้งานจริงต้องผ่านการตรวจสอบจาก TimTim.Live
GET https://api.timtim.live/v1/bulk/bfs_YOURFEED.ndjson.gz?changed_since=2026-10-06T00:00:00Zพาร์ทเนอร์รายใหญ่ให้ผู้ซื้ออยู่ในแอปของตัวเองได้ ถาม GET /v1/events/EVENT_ID/tickets เพื่อดูว่ามีอะไรขายอยู่ แล้วส่ง POST /v1/orders พร้อมตัวเลือกของผู้ซื้อ คุณจะได้ลิงก์ชำระเงินของ TimTim.Live เพื่อเปิดให้ผู้ซื้อ ยอดขายจะนับให้บริษัทของคุณโดยตรง คีย์ทดสอบลองใช้ได้เลยตอนนี้ การใช้งานจริงต้องผ่านการตรวจสอบจาก TimTim.Live และเปิดการชำระด้วยบัตรแล้ว
POST https://api.timtim.live/v1/orders (Idempotency-Key: …) {"event_id": "evt_test_washington_konpa", "ticket_type_id": "tt_test_washington_konpa", "quantity": 2, "buyer_email": "…", "buyer_name": "…"}GET /v1/offers ให้ทุกอีเวนต์ที่จ่ายรางวัลออกมาเป็นข้อเสนอ: ผู้จัด วันที่ซื้อได้ ราคา สถานที่ และรางวัล ลูกค้าของคุณเปิดใช้ผ่านลิงก์ที่ติดตามได้ของคุณ และรางวัลจะจ่ายให้บริษัทของคุณผ่าน /v1/earnings คีย์ทดสอบจะเห็นข้อเสนอตัวอย่าง ข้อเสนอจริงต้องผ่านการตรวจของ TimTim.Live การจับคู่การจ่ายด้วยบัตรโดยตรงต้องมีข้อตกลงกับเครือข่ายบัตรหรือธนาคาร และยังไม่ได้เชื่อมต่อ
GET https://api.timtim.live/v1/offers?country=USstatus คือ scheduled, postponed, rescheduled, cancelled, sold_out หรือ completed ส่วน tickets.availability คือ available, limited, sold_out, not_on_sale หรือ ended เมื่ออีเวนต์ถูกยกเลิก ให้เอาออก
GET https://api.timtim.live/v1/events/evt_test_washington_konpaคีย์ทดสอบ: 60 คำขอต่อนาที คีย์ใช้งานจริง: 120 ต่อนาที ถ้าเร็วกว่านั้นจะได้คำตอบ 429 พร้อม Retry-After ซึ่งบอกจำนวนวินาทีที่ต้องรอ
อีเวนต์ที่ผู้จัดบน TimTim.Live สร้างและเลือกแชร์ อีเวนต์ที่เรานำเข้ามาจากเว็บขายตั๋วอื่นจะไม่มีอยู่ในนั้นเลย เพราะเราไม่มีสิทธิ์แชร์
ชื่อผู้ซื้อ อีเมล ที่อยู่บ้าน เบอร์โทรศัพท์ และข้อมูลบัตร Partner API แชร์ข้อมูลอีเวนต์ ไม่ใช่ข้อมูลสมาชิกของเรา
HTML บรรทัดเดียวแสดงอีเวนต์บนเว็บไซต์ไหนก็ได้ ใช้คีย์เว็บไซต์ (tt_pk_live_) และเพิ่มเว็บไซต์ของคุณในรายการที่อนุญาตของคีย์ ถ้าไม่มีคีย์ วิดเจ็ตจะแสดงอีเวนต์ตัวอย่าง
<script src="https://timtim.live/widget/events.js"
data-key="tt_pk_live_YOUR_WEBSITE_KEY"
data-city="Washington" data-category="music" async></script>ตัวเลือก: data-city, data-country, data-category, data-limit (1–24), data-earn="true", data-lang และ data-color
ไม่บังคับ สร้างไคลเอนต์ OAuth บนแดชบอร์ด แล้วแลก client ID และ secret ของมันเป็นโทเคนเข้าถึงหนึ่งชั่วโมง และส่งโทเคนนั้นแทนคีย์ secret จะไม่ถูกส่งไปพร้อมการเรียก API ของคุณเลย และคุณขอสิทธิ์ (scopes) น้อยกว่าที่ไคลเอนต์มีได้
# 1. Trade the client ID and secret for a one-hour token
curl -u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=client_credentials -d "scope=events:read events:details" \
https://api.timtim.live/v1/oauth/token
# → {"access_token":"tt_at_…","token_type":"Bearer","expires_in":3600,"scope":"events:read events:details"}
# 2. Use the token exactly like a key
curl -H "Authorization: Bearer $ACCESS_TOKEN" "https://api.timtim.live/v1/events?city=Washington"ถ้าต้องการปิดโทเคนก่อนเวลา ให้ส่งโทเคนด้วย POST ไปที่ /v1/oauth/revoke พร้อม client ID และ secret เดิม การปิดไคลเอนต์บนแดชบอร์ดจะปิดโทเคนทั้งหมดของมันพร้อมกัน
ไม่บังคับ บนแดชบอร์ดของคุณ เปิด "ล็อกไว้กับเซิร์ฟเวอร์ของฉัน" ใต้คีย์เซิร์ฟเวอร์ คีย์ทดสอบ หรือไคลเอนต์ OAuth แล้วใส่ที่อยู่สาธารณะของเซิร์ฟเวอร์คุณ คำขอ — และคำขอ token — จากที่อื่นจะถูกปฏิเสธด้วย ip_not_allowed แม้จะใช้คีย์ที่ถูกต้อง
ใบรับรองไคลเอนต์ (mTLS): ผูกใบรับรองไคลเอนต์ TLS ของคุณกับคีย์ แล้วเรียก https://api.timtim.live ด้วยใบรับรองนั้น ทุกคำขอต้องแสดงใบรับรองนั้น การจับมือ TLS พิสูจน์ว่าคุณถือคีย์ส่วนตัวของมัน
# Your certificate's SHA-256 — paste this (or the PEM) under "Lock to my servers"
openssl x509 -in client.crt -noout -fingerprint -sha256
# Every call then presents the certificate
curl --cert client.crt --key client.key \
-H "Authorization: Bearer $KEY" "https://api.timtim.live/v1/events?city=Washington"ใช้ WordPress อยู่ไหม? ติดตั้ง TimTim.Live Events: บล็อกและช็อตโค้ดที่แสดงอีเวนต์พร้อมลิงก์ตั๋ว TimTim.Live ของคุณเอง สร้างโดย TimTim.Live คุยกับ timtim.live เท่านั้น และอัปเดตจาก timtim.live เท่านั้น
อัปโหลดไฟล์ที่ ปลั๊กอิน → เพิ่มใหม่ → อัปโหลดปลั๊กอิน วางคีย์เว็บไซต์ของคุณที่ ตั้งค่า → TimTim.Live Events แล้วกด Test Connection จากนั้นเพิ่มบล็อก TimTim.Live Events ลงในหน้าไหนก็ได้
ดาวน์โหลดปลั๊กอิน WordPress[timtim_events city="Washington" category="music" limit="6"]อีเวนต์ชุดเดียวกันในแบบ JSON Feed, RSS, XML, CSV หรือปฏิทิน (.ics) ที่ Google Calendar, Apple Calendar และ Outlook สมัครรับได้ โปรแกรมอ่านฟีดส่งเฮดเดอร์ไม่ได้ จึงให้ใส่คีย์เว็บไซต์หรือคีย์ทดสอบใน ?key= ห้ามใส่คีย์เซิร์ฟเวอร์ในลิงก์เด็ดขาด
https://timtim.live/v1/feeds/events.json?key=tt_pk_live_YOUR_KEY&city=Paris
https://timtim.live/v1/feeds/events.rss?key=tt_pk_live_YOUR_KEY&city=Paris
https://timtim.live/v1/feeds/events.xml?key=tt_pk_live_YOUR_KEY&city=Paris
https://timtim.live/v1/feeds/events.csv?key=tt_pk_live_YOUR_KEY&city=Paris
https://timtim.live/v1/feeds/events.ics?key=tt_pk_live_YOUR_KEY&city=Parisกด "เพิ่มที่อยู่" บนแดชบอร์ด แล้วเราจะส่งข้อความไปที่อยู่นั้นเมื่อมีอะไรเปลี่ยน: event.changed หรือ earnings.changed Webhook ไม่บังคับ — changed_since ให้ข้อมูลเดียวกันได้
{
"id": "whd_8Fk2mQxR7tLp",
"type": "event.changed",
"created_at": "2026-10-06T15:04:05.000Z",
"mode": "live",
"data": {
"event": {
"id": "ev_…",
"name": "…",
"status": "cancelled",
"tickets": {
"availability": "ended",
"buy_url": "https://timtim.live/b/…"
},
"…": "the same event object as GET /v1/events"
}
}
}ตรวจทุกข้อความ: ข้อความถูกเซ็นด้วยรหัสลับของคุณ ปฏิเสธข้อความที่เก่ากว่าห้านาที และไม่ต้องสนใจ TimTim-Delivery-Id ที่คุณจัดการไปแล้ว
// Node — Express with the RAW body (do not JSON.parse before checking)
import crypto from "node:crypto";
app.post("/timtim", express.raw({ type: "application/json" }), (req, res) => {
const header = req.get("TimTim-Signature") ?? ""; // t=1700000000,v1=<hex>
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const body = req.body.toString("utf8");
const expected = crypto.createHmac("sha256", process.env.TIMTIM_WEBHOOK_SECRET)
.update(`${parts.t}.${body}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) <= 300;
const same = expected.length === (parts.v1 ?? "").length &&
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
if (!fresh || !same) return res.sendStatus(400);
const message = JSON.parse(body); // { id, type, mode, data }
if (alreadyHandled(req.get("TimTim-Delivery-Id"))) return res.sendStatus(200);
// message.type === "event.changed" → message.data.event
// message.type === "earnings.changed" → message.data.earning
res.sendStatus(200);
});ตอบด้วย 2xx ใดก็ได้ภายใน 10 วินาที ถ้าไม่ตอบ เราจะลองใหม่หลัง 1 นาที 5 นาที 30 นาที แล้ว 2, 6, 12 และ 24 ชั่วโมง จากนั้นจะหยุด เราไม่ตามการเปลี่ยนเส้นทางเลย
คีย์ทดสอบจะได้อีเวนต์ตัวอย่างที่มีป้าย อีเวนต์ทดสอบ — ไม่มีเงินจริง เปิด buy_url กด ซื้อตั๋วทดสอบ แล้วขอดูรายได้ของคุณ ลองคืนเงินแล้วดูรายได้ถูกหักคืน
ข้อผิดพลาดอธิบายด้วยคำง่าย ๆ มีหัวข้อและบอกว่าต้องทำอะไรต่อ ทุกคำตอบมี TimTim-Request-Id ส่งมาให้เรา แล้วเราจะหาคำขอของคุณเจอ
missing_keyPlease add your TimTim.Live key. Send it as: Authorization: Bearer tt_test_… — get a test key at /partners/dashboard.invalid_keyWe do not recognise that key. Check you copied the whole key, or make a new one at /partners/dashboard.revoked_keyThat key was switched off. Make a new key at /partners/dashboard.partner_inactiveThis partner account cannot use live keys right now. Your test key still works. Contact TimTim.Live partnerships to review the account.missing_scopeThis key is not allowed to do that. Earnings need a secret key (tt_sk_live_…) or a test key, used from your server.domain_not_allowedThis website is not allowed to use this key. Add the website to the key's allowed domains at /partners/dashboard.unknown_parameterWe do not know one of those parameters. See /partners/docs for the list.invalid_countryWe could not read that country. Use a two-letter code, for example country=US or country=FR.invalid_dateWe could not read that date. Dates look like 2026-10-20.invalid_changed_sinceWe could not read changed_since. Use a full time, for example changed_since=2026-10-06T10:00:00Z.invalid_booleanThat value must be true or false. For example commissioned=true.invalid_numberThat value must be a number. For example minimum_earnings=5.invalid_nearWe could not find that place. Try near=Paris,FR or city=Paris&country=FR.invalid_locationWe could not read that location. Send lat, lng and optionally radius in kilometres.invalid_limitlimit must be between 1 and 100. Leave it out to get 20.invalid_cursorThat cursor is not one we gave you. Use the `next` value from the previous page exactly as it came.event_not_foundWe could not find that event. It may have been removed, or it is not shared with partners.capability_requiredCard-linked offers are not switched on for your account. Offers are an enterprise feature. Your test key shows sample offers now; ask TimTim.Live partnerships to review your account for live offers.server_key_requiredThis is for your server only. Use a secret key (tt_sk_live_…) or a test key from your server, never a website key in a web page.commerce_not_enabledSelling tickets in your own app is not switched on for your account. This is an enterprise feature (EMBEDDED_CHECKOUT). Your test key can try it now; ask TimTim.Live partnerships to review your account. Until then, use each event's buy_url.checkout_not_openCard payments are not open on TimTim.Live yet. Send the buyer to the event's buy_url instead. Your test key can still rehearse orders.ticket_not_availableThat ticket cannot be bought right now. It may be sold out, not on sale yet, or no longer on sale. Ask /v1/events/{id}/tickets for what is on sale now.order_invalidWe could not read that order. See /partners/docs for the fields an order needs.idempotency_key_requiredPlease send an Idempotency-Key header. 8 to 80 letters, digits, - or _. Send the same key again to retry safely — you will get the same order, never a second one.order_not_foundWe could not find that order. Only orders your company began with this kind of key (test or live) can be read here.bulk_not_enabledBulk feeds are not switched on for your account. This is an enterprise feature (BULK_FEEDS). Your test key can try it now; ask TimTim.Live partnerships to review your account. Until then, page through /v1/events or the feeds.bulk_not_foundWe could not find that bulk feed. Use the address shown on /partners/dashboard: /v1/bulk/<subscription id>.ndjson.gz or .csv.gz.bulk_too_soonA full file was made for this feed a few minutes ago. Full files can be made every 15 minutes. For what changed since, add changed_since=<time> — that is not limited.event_withdrawnThis event is no longer shared with partners. Stop showing it and remove its buy_url. Nothing else is needed — your old link still takes people to the event page.invalid_trackWe could not read that tracking signal. Send {"type":"impression"}, {"type":"event_view","event_id":"…"} or {"type":"event_click","event_id":"…"}. Sales are recorded by TimTim.Live, never sent from a page.not_foundThere is nothing at this address. The Partner API lives at /v1/events, /v1/events/{id}, /v1/offers and /v1/earnings.method_not_allowedThis address does not answer that method. The Allow header lists the methods it answers.key_in_urlSend your key in the Authorization header. Only /v1/feeds reads a key from the URL (?key=). Everywhere else use Authorization: Bearer <key> — keys in URLs end up in logs.ip_not_allowedThis key only works from your listed servers. Call from an address on the key's allowlist, or change the list at /partners/dashboard.certificate_requiredThis key needs your client certificate. Connect to https://api.timtim.live with the TLS client certificate pinned to this key.certificate_mismatchThat is not the certificate pinned to this key. Use the certificate whose SHA-256 is on your dashboard, or pin the new one there.rate_limitedToo many requests — please slow down. Wait the number of seconds in Retry-After, then try again.server_errorSomething went wrong on our side. Please try again. If it keeps happening, send us your TimTim Request ID.คีย์ทดสอบของคุณใช้ได้ทันที สำหรับคีย์ใช้งานจริง จะมีคนจาก TimTim.Live ดูชื่อบริษัท เว็บไซต์ และวิธีที่คุณจะแสดงอีเวนต์ คุณจะเห็นคำตอบในแดชบอร์ดของคุณ
เวอร์ชัน 1 มีแต่จะเพิ่มขึ้น เราเพิ่มของใหม่ เราไม่ลบหรือเปลี่ยนชื่อสิ่งที่มีอยู่แล้ว
เป้าหมายของเรา
เราชวนทุกคนมาช่วยกันสร้างมรดกให้มนุษยชาติ
ร่วมสามภารกิจที่จะอยู่ยืนยาวกว่าพวกเราทุกคน

สร้างความหวัง
ช่วยให้ทุกครอบครัวมีที่ที่เรียกว่าบ้าน — สนับสนุนผ่าน OseloHelp.com องค์กรไม่แสวงกำไรที่ได้รับยกเว้นภาษีของเรา

รักษามนุษยชาติด้วยดนตรี
เก็บรักษาเพลงและเรื่องราวของมนุษยชาติไว้อีก 1,000 ปีขึ้นไป

จุดประกายนักสำรวจรุ่นต่อไป
ให้ทุกคนมีโอกาสได้สำรวจอวกาศ

แบบของเครื่องบินอวกาศที่ขึ้นบินจากรันเวย์แทนการปล่อยด้วยจรวด นี่คือแนวคิด ยังไม่ใช่ยานที่สร้างเสร็จ
ดูว่าทำงานอย่างไรทุกอย่างเชื่อมกันอย่างไร
ไม่มีอะไรที่นี่เป็นธุรกิจแยกกัน — แต่ละขั้นช่วยให้ขั้นต่อไปแข็งแรงขึ้น
เป้าหมายเดียว ธุรกิจมากมายที่เสริมกัน
ไม่ว่าคุณจะฟังเพลง แชร์เรื่องราว ใส่สินค้าที่ระลึก ไปดูคอนเสิร์ต แปลเนื้อเพลง แนะนำประเทศ หรือแค่บอกเพื่อน — คุณก็ได้เป็นส่วนหนึ่งของสิ่งที่สร้างมาให้อยู่ไปอีกหลายรุ่น
ทุกคนมีส่วนร่วมได้ ไม่มีการช่วยเหลือใดที่เล็กเกินไป
TimTim.Live — สำรวจโลกผ่านเสียงเพลง
TimTim.Live ทำแผนที่แล้ว 233,839 สถานที่ ในทั้ง 195 ประเทศ ไปถึงชุมชนที่มีประชากรเพียงราว 1,000 คน ได้แก่:
257 รัฐ • 1,690 จังหวัด • 4,808 เคาน์ตี • 41,130 อำเภอ • 13,471 เมือง • 117,896 เมืองเล็ก • 40,988 หมู่บ้าน
© 2026 TimTim.Live. สงวนลิขสิทธิ์