Partner API - flugge start
Jo earste yntegraasje komt oerien op ien skerm.
Besykje it no — gjin kaai, gjin ûndertekening
Dit adres yn jo blêder iepenje. Jo sjogge daliks de foarbylden.
https://timtim.live/api/partner-network/demo?city=Washington- 1
Krij in testsleutel
Meld yn, fertel ús wie jo binne en druk op Test- kaai oanmeitsje. It begjint mei tt_test_ en sjogget allinne stekproefbarren.
- 2
Foarfallen sykje
Freegje om barren yn in wenplak.
curl "https://api.timtim.live/v1/events?city=Washington&category=music" \ -H "Authorization: Bearer tt_test_YOUR_KEY" - 3
It evenemint werjaan
Elts barren hat in namme, datum, plak, ôfbylding, priis en klear makke labels foar jo kaart.
- 4
Brûk it webadres
Brûk it boy_ url- adres dy't jo hawwe. Werhelling: TimTim.Live hânt de byhûding fan dizze keppeling
- 5
Fertuten sjen litte
Sjoch de persoanen dy ferstjoerd binne, kaartsjes dy' t fersellt en yn' e Armeamd binne, of der om frege wurde.
GET https://api.timtim.live/v1/earnings
Referinsje
Wêr te ferstjoeren fersiken
https://api.timtim.live/v1Jo ferbiningskaai
Stjoer jo kaai yn de autorisaasjekoptekst. Testtoetsen (t_test_) besjen allinne stekproefbarren. Websteesleutels (t_pk_live_) kinne sitte yn in webside en allinne lêsbarren. Tsjinnertoetsen (t_sk_live_) bliuw op jo tsjinner en kin ek begjinwearde lêze. Wy sjogge in kaai ien kear — hâld it feilich.
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;
}Filters
city- Foarfallen yn dizze stad.
country- Twa- letter koade, lykas US.
category- Bygelyks musyk, festival of konferinsje.
from- Foarfallen op of nei dizze datum (2026- 10- 20).
to- Foarfallen op of foar dizze datum.
changed_since- Allinne barren dy nei dit tiidstip feroare binne.
commissioned- true = allinne foarfallen dy' t in beloan beliezen.
minimum_earnings- Allinne eveneminten dy' t yn elts gefal safolle kaartsje betelje.
near- In plak, as bygelyks neamd=Paris,FR
limit- Hoefolle barren de side, 1 oant 100 (20 as jo it útlitte).
Allinne fertelje my wat er wizige
Bewarje de tiid fan jo lêste syngronisaasje en ferstjoere as syngronisaasje. Jo krije allinnich barren dy feroare binne — ynklusyf annulearrings en fer selde werjeften. Gjin webhook nedich. Foarfallen dy' t jo ophâlde sille komme yn de werhelle list.
GET https://api.timtim.live/v1/events?changed_since=2026-10-06T10:00:00ZMear as ien side
As it foarige antwurd komt, dan wurdt it weromstjoerd as kursor= om de neikommende side te opheljen. As de neikommende is leech, ha jo alles.
GET https://api.timtim.live/v1/events?city=Paris&cursor=eyJtIjoiZCIs…Fertsjinning
Elts barren is fertjine. As fertjinning. subsidiabel is Net- wier, dan hat it foarfal gjin beloning — it is noch wol de wearde wêrop it te sjen is. As it waar is, dan fertsjinne jo. beskriuwt wat jo krije, bygelyks "$5 per ynstutabele kaartsje". As it oankeap weromgien wurdt, dan wurdt de belulaasje omkeard.
Bulkfeeds (alles yn ien triem)
Bewarje in bulkfeed op dyn dashboard. Download dan alle eveneminten dêryn yn ien zipbestân, mei dyn serverkaai: GET /v1/bulk/FEED_ID.ndjson.gz of .csv.gz. Foegje ?changed_since= ta foar allinnich wat feroare is, ek eveneminten dy't fuorthelle binne. Mei testkaaien kinsto it no al besykje; foar live gebrûk is in kontrôle troch TimTim.Live nedich.
GET https://api.timtim.live/v1/bulk/bfs_YOURFEED.ndjson.gz?changed_since=2026-10-06T00:00:00ZTickets yn jo eigen tap fersellje (beheind commerce)
Grute partners kinne ferskaffers yn har eigen tap hâlde. Freegje GET /v1/events/EVENT_ID/tickets foar wat der ferkeap is, dêrnei POST /v1/oarders mei de kar fan de keaper. Jo krije in keppeling nei TimTim.Live betelling om te iepenjen foar de ferkeaper. De ferkeap is rjochtstreeks oan jo bedriuw rûge. Test de kaaien kin it no besykje. Live- gebrûk hat in resinsje fan TimTim.Live nedich en kaartbetellingen binne ynskeakele.
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": "…"}Kaart keppele oanbiedingen (banken en beleuoeren- programma' s)
GET /v1/ oanbiedings toant elk barren dat in beloning útbetelle wurdt as in oanbieding. Eltse oanbieder hat de organisator, de datums dy' t jo keapje kinne, de priis, it plak en de beloan. Jo klant aktivearret it troch jo sykterm en de rebelânsje wurdt oan jo bedriuw betelle troch / v1/earingen. Testtoetsen sjogge foarbyldoanbiedingen. Live- oanbiedings hawwe in TimTim.Live resinsje nedich. Ferlykbere kaartbetellingen daliks fereasket in ôfspraak mei in kaartnetwurk of - bank, en is net ferbûn.
GET https://api.timtim.live/v1/offers?country=USBarrentastân en tickets
status is pland, útstelt, oerplakearre, annulearre, fer seld_ of foltôge.Bywurke is beskikber, beheind, fersolda_ out, not_on_ sale of einigd. At in foarfal annulearre is, fier dizze ôf.
GET https://api.timtim.live/v1/events/evt_test_washington_konpaHoe flits jo freegje kinne
Testtoetsen: 60 fersyken in hiele minút. Libjende toetsen: 120 in hiele minút Gean flugger nei in 429 antwurd mei Op 'e nij besykje- nei, it oantal sekonden om te wachtsje.
Hokker barren jo krije
Ôfspraken dy' t TimTim.Live organisators oanmeitsje en kieze om diele te litten. Ôfspraken hokker wy ymportearre hawwe fan oare ticketssiden wurde nea ynklusyf, omdat wy net de nedige rjochten hawwe om se te dielen.
Wat wy nea ferstjoere
Kaopernammen, e- mailadres' s, adres' s, telefoannûmers en kaartdetails. De Partner API dielt evenemintynformaasje, net ons leden.
Webside widget
Ien rigel HTML sjen litte barren op in webside. Brûk in websteesleutel (t_ pk_live_) en heakje jo webside ta oan de tasteane list mei kaaien. By gjin kaai lit it stekproefbarren sjen.
<script src="https://timtim.live/widget/events.js"
data-key="tt_pk_live_YOUR_WEBSITE_KEY"
data-city="Washington" data-category="music" async></script>Opsjes: gegevenscity, gegevenslân, gegevenskategory, gegevenslimyt (1- 24), gegevens- earn=" Wier", gegevens- lang en gegevenskleur.
OAuth 2. 0 (grutte yntegraasjes)
Opsjoneel. Meitsje in OAuth client op jo dashboard Ferstjoer it klant- ID en geheim foar in tagong token dy' t ien oere duorret. Dit token ferstjoere ynstee fan in kaai. It geheim ferrint nea mei jo API- oanrop, en jo kinne frege om minder grutromten dan it kliïnt.
# 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"Om in token earder ôf te sluten, meld it dan oan /v1/oauth/reklame mei deselde ID en geheim kliïnt. It útskeakeljen fan de klant op jo dashboard einigt alle token tegelijk.
In kaai skoattelje op jo tsjinners
Opsjoneel. Op jo dashboard fine jo in tsjinnersleutel, testsleutel of OAuth kliïnt. Iepenje "Beskoattelje op myn tsjinners" en list de publike adressen fan jo tsjinners. Oanrop - en tokenfersiken - fan alle oare browsen wurde wegere mei ip_ not_ allowed, ek mei de rjochte toets.
Klantsertifikaten (mTLS) foar grutte bedriuwen: Gje ús de ID- kaart fan jo tsjinner (in sertifikaat) en fêstlizze dizze op in kaai. Roan https://api.tim.live dêrmei oan. Wy beantwurdzje allinne de tsjinner dy' t dit sertifikaat befettet.
# 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-plugin
WordPress brûke? Installearje TimTim.Live barren: in blok en in ferkoarte koade dy' t barren sjen lit mei jo eigen TimTim.Live ticketkeppelings. It wurdt makke troch TimTim.Live, oersets allinne nei tim.live, en fernijingen allinne fan tim.life.
Triem oplade yn plugins → Nije → Opladen Plugin taheakje. Plak jo kaai fan de webside yn ynstellings → TimTim.Live eveneminten en druk op de testferbining. Dan it TimTim.Live foarfallen blok oan eltse side taheakje.
WordPress Plugin ynlade[timtim_events city="Washington" category="music" limit="6"]NijsoanfierGenericName
Itselde barren as JSON Feed, RSS, XML, CSV of in aginda- triem (.ics). Google- aginda, Apple- aginda en Outlook kinne ynskriuwe by de aginda. Feed- lêzers kinne gjin berjochtkoppen ferstjoere. Set dus in websteesleutel of in testsleutel yn ?key=. Nea in tsjinnersleutel yn in keppeling sette.
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=ParisWebhooksComment
Heakje in adres ta op jo oerblêd en we ferstjoere it in berjocht as der wat feroaret: barren. feroare of ûntfangst. Webhoks binne opsjoneel - feroare_ dien jo deselde ynformaasje.
{
"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"
}
}
}Kontrolearje elk berjocht: it is ûndertekene mei jo geheim. Negearret neat âlder as fiif minuten, en negearre in TimTim- Delivery- Id dy jo al behannele hawwe.
// 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);
});Beantwurdzje mei elke 2xx yn 10 sekonden Wannear' t net selektearre is, besykje wy it wer nei 1 minút, 5 minuten, 30 minuten, dan 2, 6, 12 en 24 oeren, stopje dan. Wy folgje nea trochliedings.
De sandpoarte
Testtoetsen krije in stekproef barren dy' t markearre binne TEST EVENT - NET WIER. Iepenje in buy_url, druk op Testticket keapsje, en ferfoeg om jo salaris. Simulearje in weromjefte en observearje dizze omkeard.
As der wat mis giet
Flaters fersake himsels yn platte wurden, mei in titel en wat der fierder moat dwaan. Elk antwurd hat in TimTim- Request- Id. Stjoer it nei ús en wy kinne jo fersyk fine.
- 401
missing_keyPlease add your TimTim.Live key. Send it as: Authorization: Bearer tt_test_… — get a test key at /partners/dashboard. - 401
invalid_keyWe do not recognise that key. Check you copied the whole key, or make a new one at /partners/dashboard. - 401
revoked_keyThat key was switched off. Make a new key at /partners/dashboard. - 403
partner_inactiveThis partner account cannot use live keys right now. Your test key still works. Contact TimTim.Live partnerships to review the account. - 403
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. - 403
domain_not_allowedThis website is not allowed to use this key. Add the website to the key's allowed domains at /partners/dashboard. - 400
unknown_parameterWe do not know one of those parameters. See /partners/docs for the list. - 400
invalid_countryWe could not read that country. Use a two-letter code, for example country=US or country=FR. - 400
invalid_dateWe could not read that date. Dates look like 2026-10-20. - 400
invalid_changed_sinceWe could not read changed_since. Use a full time, for example changed_since=2026-10-06T10:00:00Z. - 400
invalid_booleanThat value must be true or false. For example commissioned=true. - 400
invalid_numberThat value must be a number. For example minimum_earnings=5. - 400
invalid_nearWe could not find that place. Try near=Paris,FR or city=Paris&country=FR. - 400
invalid_locationWe could not read that location. Send lat, lng and optionally radius in kilometres. - 400
invalid_limitlimit must be between 1 and 100. Leave it out to get 20. - 400
invalid_cursorThat cursor is not one we gave you. Use the `next` value from the previous page exactly as it came. - 404
event_not_foundWe could not find that event. It may have been removed, or it is not shared with partners. - 403
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. - 403
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. - 403
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. - 503
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. - 409
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. - 400
order_invalidWe could not read that order. See /partners/docs for the fields an order needs. - 409
idempotency_conflictThat Idempotency-Key was already used for a different order. Send exactly the same order to get the same answer back, or use a new Idempotency-Key for a new order. - 400
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. - 404
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. - 403
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. - 404
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. - 429
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. - 410
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. - 400
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. - 404
not_foundThere is nothing at this address. The Partner API lives at /v1/events, /v1/events/{id}, /v1/offers and /v1/earnings. - 405
method_not_allowedThis address does not answer that method. The Allow header lists the methods it answers. - 401
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. - 403
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. - 401
certificate_requiredThis key needs your client certificate. Connect to https://api.timtim.live with the TLS client certificate pinned to this key. - 401
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. - 429
rate_limitedToo many requests — please slow down. Wait the number of seconds in Retry-After, then try again. - 500
server_errorSomething went wrong on our side. Please try again. If it keeps happening, send us your TimTim Request ID.
It kontrak
De folsleine beskriuwing fan elts fjild, yn it OpenAPI- formaat kin jo helpprogramma' s lêze.
Openapi.yaml ynladeHoe jo aktive kaaien iepenje
Jo testtoets wurket fuort. Foar aktive kaaien, in persoan om TimTim.Live lit jo sjen yn jo bedriuwsnamme, jo webside en hoe jo barren sjen litte sille. Jo sjogge it antwurd op jo daslpaneel.
TimTim.Live API bywurkingen
Ferzje 1 groeit allinne. Wy taheakje Wy fuortsmite of werneame net it wat der al is.
- — Foarfalantwurden sille no in ETag barre. Stjoer it werom as- Gjin- foldwaan om in flugge 304 te krijen as der neat feroare is. Opsjoneel.
- — Websteesleutels telt no eltse besöker op harsels, sadat besete siden fierder wurkje. Gjin aksje nedich.
- — Klantsertifikaten (mTLS) binne iepen: fest jo sertifikaat yn in kaai yn jo instrumentpaneel. Opsjoneel. Gjin aksje nedich.
- — Bulkfeeds: elts foarfal kinne jo yn ien triem sjen litte op GET / v1/bulk. Opsjoneel. Gjin aksje nedich.
- — De API hat syn eigen adres: https://api.tim.live/v1. https://tim.liv.v1 wurket hielendal. Gjin aksje nedich.
- — Jo eigen markearde útkeksside by tim.live/checkout. Opsjoneel. Gjin aksje nedich.
- — Taljochtingen selje yn jo eigen tap: GET /v1/events/EVENT_ID/tickets en POST /v1/Orders. Opsjoneel. Gjin aksje nedich.
- — In publike tastânside op /partners/status, kontrolearre eltse minút. Gjin aksje nedich.
- — Alle moannen op ôfstân foar bedriuwen: GET /v1/betellings. Gjin aksje nedich.
- — Postbacks: Taheakje ?sub_id= oan in keap keppeling en wy stjoere it werom mei de ferkeap. Opsjoneel. Gjin aksje nedich.
- — Kaart keppele oanbiedings foar banken en belulaasjeprogramma' s: GET / v1/ oanbiedings. Opsjoneel. Gjin aksje nedich.
- — Kalinder feed: /v1/feeds/events.ics foar Google Calendar, Apple Calendar en Outlook. Gjin aksje nedich.
- — Beskoattelje in kaai op jo tsjinners: IP-tagongslisten no, klantsertifikaten (mTLS) op api.tim.live. Opsjoneel. Gjin aksje nedich.
- — OAuth 2. 0 klantrjochtingen foar grutte yntegraasjes: POST /v1/oauth/token en /v1/auth/relock. Kaaien wurkje. Gjin aksje nedich.
- — WordPress plugin 1. 0. 0: in blok, inkoartkoade en in ynstellingsside. It fernije himsels fan tim.live. Gjin aksje nedich.
- — Webstee widget, JSON/RSS/XML/CSV feeds en webhoks (event.changed, paraffice.changeed). Gjin aksje nedich.
- — Partner API v1: foarfallen, ien barren, begjint en de sandpoarte. Gjin aksje nedich.