
🏠 Thuis
Hoop bouwen
Help elk gezin aan een thuis — gefinancierd via OseloHelp.com, onze belastingvrije non-profitorganisatie.
Wereldwijde muziekdistributie: binnenkort beschikbaar!
3.004.605+ Artiestenpagina’s · 8.684.002+ Bedrijfspagina’s · Beschikbaar in 417+ Talen

Je eerste koppeling past op één scherm.
Open dit adres in je browser. Je ziet meteen voorbeeldevenementen.
https://timtim.live/api/partner-network/demo?city=WashingtonLog in, vertel ons wie je bent en druk op Testsleutel maken. Hij begint met tt_test_ en ziet alleen voorbeeldevenementen.
Vraag de evenementen in een stad op.
curl "https://api.timtim.live/v1/events?city=Washington&category=music" \
-H "Authorization: Bearer tt_test_YOUR_KEY"Elk evenement heeft een naam, datum, plek, afbeelding, prijs en kant-en-klare teksten voor je kaart.
Gebruik de buy_url die we je geven. Dat is alles. TimTim.Live regelt de toeschrijving in die link.
Zie gestuurde mensen, verkochte tickets en verdiensten op je dashboard, of vraag ze op.
GET https://api.timtim.live/v1/earningshttps://api.timtim.live/v1Stuur je sleutel mee in de Authorization-header. Testsleutels (tt_test_) zien alleen voorbeeldevenementen. Websitesleutels (tt_pk_live_) mogen in een webpagina staan en lezen alleen evenementen. Serversleutels (tt_sk_live_) blijven op je server en kunnen ook verdiensten lezen. We tonen een sleutel maar één keer — bewaar hem goed.
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_earningsnearlimitBewaar de tijd van je laatste synchronisatie en stuur die mee als changed_since. Je krijgt alleen evenementen die veranderd zijn — ook afgelaste en uitverkochte shows. Geen webhook nodig. Evenementen die je niet meer mag tonen, staan in de lijst withdrawn.
GET https://api.timtim.live/v1/events?changed_since=2026-10-06T10:00:00ZAls het antwoord next bevat, stuur het terug als cursor= om de volgende pagina te krijgen. Is next leeg, dan heb je alles.
GET https://api.timtim.live/v1/events?city=Paris&cursor=eyJtIjoiZCIs…Elk evenement heeft earn. Is earn.eligible false, dan heeft het evenement geen beloning — het is toch de moeite waard om te laten zien. Is het true, dan zegt earn.description wat je krijgt, bijvoorbeeld "$5 per geldig ticket". Wordt de aankoop terugbetaald, dan wordt de beloning teruggedraaid.
Sla een bulkfeed op in je dashboard en download dan al zijn evenementen in één gecomprimeerd bestand: GET /v1/bulk/FEED_ID.ndjson.gz of .csv.gz, met je serversleutel. Voeg ?changed_since= toe voor alleen wat veranderd is, ook weggehaalde evenementen. Testsleutels kunnen het nu al proberen; echt gebruik vraagt een controle door TimTim.Live.
GET https://api.timtim.live/v1/bulk/bfs_YOURFEED.ndjson.gz?changed_since=2026-10-06T00:00:00ZGrote partners kunnen kopers in hun eigen app houden. Vraag GET /v1/events/EVENT_ID/tickets op om te zien wat te koop is, en stuur dan POST /v1/orders met de keuze van de koper. Je krijgt een TimTim.Live-betaallink om voor de koper te openen; de verkoop wordt direct aan je bedrijf toegekend. Testsleutels kunnen het nu al proberen. Echt gebruik vraagt een controle door TimTim.Live en ingeschakelde kaartbetalingen.
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 geeft elk evenement dat een beloning betaalt als aanbieding: de organisator, de data waarop je kunt kopen, de prijs, de plek en de beloning. Je klant activeert het via je gevolgde link, en de beloning wordt via /v1/earnings aan je bedrijf betaald. Testsleutels zien voorbeeldaanbiedingen. Echte aanbiedingen hebben een controle door TimTim.Live nodig. Kaartbetalingen direct koppelen vraagt een afspraak met een kaartnetwerk of bank, en is niet aangesloten.
GET https://api.timtim.live/v1/offers?country=USstatus is scheduled, postponed, rescheduled, cancelled, sold_out of completed. tickets.availability is available, limited, sold_out, not_on_sale of ended. Als een evenement is afgelast, haal het dan weg.
GET https://api.timtim.live/v1/events/evt_test_washington_konpaTestsleutels: 60 verzoeken per minuut. Live-sleutels: 120 per minuut. Ga je sneller, dan krijg je een 429-antwoord met Retry-After, het aantal seconden dat je moet wachten.
Evenementen die organisatoren op TimTim.Live maken en willen delen. Evenementen die we van andere ticketsites hebben overgenomen, zitten er nooit bij, omdat we niet het recht hebben om ze te delen.
Namen van kopers, e-mailadressen, huisadressen, telefoonnummers en kaartgegevens. De Partner API deelt informatie over evenementen, niet over onze leden.
Eén regel HTML laat evenementen zien op elke website. Gebruik een websitesleutel (tt_pk_live_) en zet je website op de lijst met toegestane websites van de sleutel. Zonder sleutel laat hij voorbeeldevenementen zien.
<script src="https://timtim.live/widget/events.js"
data-key="tt_pk_live_YOUR_WEBSITE_KEY"
data-city="Washington" data-category="music" async></script>Opties: data-city, data-country, data-category, data-limit (1–24), data-earn="true", data-lang en data-color.
Optioneel. Maak een OAuth-client op je dashboard. Ruil daarna de client-ID en het geheim in voor een toegangstoken van een uur, en stuur dat token in plaats van een sleutel. Het geheim gaat nooit mee met je API-verzoeken, en je kunt om minder rechten (scopes) vragen dan de client heeft.
# 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"Wil je een token eerder stoppen? Stuur het met POST naar /v1/oauth/revoke, met dezelfde client-ID en hetzelfde geheim. Zet je de client uit op je dashboard, dan stoppen al zijn tokens tegelijk.
Optioneel. Open op je dashboard "Vergrendel op mijn servers" onder een serversleutel, testsleutel of OAuth-client en vul de openbare adressen van je servers in. Oproepen — en tokenaanvragen — van ergens anders worden geweigerd met ip_not_allowed, zelfs met de juiste sleutel.
Clientcertificaten (mTLS): koppel je TLS-clientcertificaat aan een sleutel en roep daarna https://api.timtim.live ermee aan. Elke oproep moet dat certificaat laten zien; de TLS-handshake bewijst dat jij de privésleutel ervan hebt.
# 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"Gebruik je WordPress? Installeer TimTim.Live Events: een blok en een shortcode die evenementen laten zien met je eigen TimTim.Live-ticketlinks. Hij is gemaakt door TimTim.Live, praat alleen met timtim.live en werkt alleen bij vanaf timtim.live.
Upload het bestand via Plugins → Nieuwe toevoegen → Plugin uploaden. Plak je websitesleutel in Instellingen → TimTim.Live Events en klik op Test Connection. Voeg daarna het blok TimTim.Live Events toe aan een pagina.
Download de WordPress-plugin[timtim_events city="Washington" category="music" limit="6"]Dezelfde evenementen als JSON Feed, RSS, XML, CSV of een agenda (.ics) waarop Google Calendar, Apple Calendar en Outlook zich kunnen abonneren. Feedlezers kunnen geen headers sturen, dus zet een websitesleutel of een testsleutel in ?key=. Zet nooit een serversleutel in een link.
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=ParisVoeg een adres toe op je dashboard en we sturen er een bericht naartoe als er iets verandert: event.changed of earnings.changed. Webhooks zijn niet verplicht — changed_since geeft je dezelfde informatie.
{
"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"
}
}
}Controleer elk bericht: het is ondertekend met jouw geheim. Weiger alles wat ouder is dan vijf minuten, en negeer een TimTim-Delivery-Id die je al hebt verwerkt.
// 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);
});Antwoord binnen 10 seconden met een 2xx. Zo niet, dan proberen we het opnieuw na 1 minuut, 5 minuten, 30 minuten, daarna na 2, 6, 12 en 24 uur, en dan stoppen we. We volgen nooit doorverwijzingen.
Testsleutels krijgen voorbeeldevenementen met het label TESTEVENEMENT — GEEN ECHT GELD. Open een buy_url, druk op Testticket kopen en vraag daarna je verdiensten op. Doe een terugbetaling na en zie hoe die wordt teruggedraaid.
Fouten leggen zichzelf uit in gewone woorden, met een titel en wat je daarna moet doen. Elk antwoord heeft een TimTim-Request-Id. Stuur die naar ons, dan vinden we je verzoek.
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.De volledige beschrijving van elk veld, in het OpenAPI-formaat dat je tools kunnen lezen.
openapi.yaml downloadenJe testsleutel werkt meteen. Voor live sleutels kijkt een persoon bij TimTim.Live naar je bedrijfsnaam, je website en hoe je evenementen gaat tonen. Je ziet het antwoord op je dashboard.
Versie 1 wordt alleen maar groter. We voegen nieuwe dingen toe. We halen niets weg en geven niets wat er al is een andere naam.
Ons doel
We nodigen iedereen uit om mee te helpen een erfenis voor de mensheid na te laten.
Doe mee aan drie missies die ons allemaal zullen overleven

Hoop bouwen
Help elk gezin aan een thuis — gefinancierd via OseloHelp.com, onze belastingvrije non-profitorganisatie.

De mensheid bewaren via muziek
De muziek en verhalen van de mensheid bewaren voor de komende 1.000+ jaar.

De volgende generatie ontdekkers inspireren
De kans om de ruimte te verkennen voor iedereen mogelijk maken.

Het ontwerp van een ruimtevliegtuig dat opstijgt van een startbaan in plaats van gelanceerd te worden met een raket. Het is een concept, geen voltooid toestel.
Bekijk hoe het werktHoe alles samenhangt
Niets hier is een los bedrijf — elke stap versterkt de volgende.
Eén doel. Veel bedrijven die elkaar versterken.
Of je nu naar een liedje luistert, een verhaal deelt, de merchandise draagt, naar een concert gaat, songteksten vertaalt, een land aanraadt of het gewoon aan een vriend vertelt — je wordt deel van iets dat generaties lang moet blijven bestaan.
Iedereen kan meedoen. Geen bijdrage is te klein.
TimTim.Live — Ontdek de wereld via muziek.
We verbinden mensen in 195 landen, nu met 3.004.605+ artiestenpagina’s die groeien tot meer dan 4 miljoen · 8.684.002+ bedrijfspagina’s die groeien tot 400 miljoen · de site wordt vertaald in 417 lokale talen wereldwijd.
TimTim.Live brengt al 233.839 plaatsen in alle 195 landen in kaart, tot gemeenschappen van maar 1.000 inwoners, waaronder:
257 staten • 1.690 provincies • 4.808 graafschappen • 41.130 districten • 13.471 steden • 117.896 kleine steden • 40.988 dorpen
© 2026 TimTim.Live. Alle rechten voorbehouden.