
🏠 Lar
Construa Esperança
Ajude cada família a ter um lugar para chamar de lar — financiado por OseloHelp.com, nossa organização sem fins lucrativos isenta de impostos.
Distribuição musical global: em breve!
3.004.605+ páginas de artistas · 8.684.002+ páginas de negócios · Disponível em 417+ idiomas

Sua primeira integração cabe em uma tela só.
Abra este endereço no seu navegador. Você vai ver eventos de exemplo na hora.
https://timtim.live/api/partner-network/demo?city=WashingtonEntre, conte quem você é e toque em Criar chave de teste. Ela começa com tt_test_ e só vê eventos de exemplo.
Peça os eventos de uma cidade.
curl "https://api.timtim.live/v1/events?city=Washington&category=music" \
-H "Authorization: Bearer tt_test_YOUR_KEY"Cada evento tem nome, data, lugar, imagem, preço e textos prontos para o seu card.
Use o buy_url que damos a você. Pronto. O TimTim.Live cuida da atribuição dentro desse link.
Veja pessoas enviadas, ingressos vendidos e ganhos no seu painel, ou peça esses dados.
GET https://api.timtim.live/v1/earningshttps://api.timtim.live/v1Envie sua chave no cabeçalho Authorization. Chaves de teste (tt_test_) só veem eventos de exemplo. Chaves de site (tt_pk_live_) podem ficar em uma página web e só leem eventos. Chaves de servidor (tt_sk_live_) ficam no seu servidor e também leem ganhos. Mostramos cada chave uma vez só — guarde bem.
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_earningsnearlimitGuarde o horário da sua última sincronização e envie como changed_since. Você recebe só os eventos que mudaram — inclusive cancelamentos e shows esgotados. Não precisa de webhook. Os eventos que você deve parar de mostrar vêm na lista withdrawn.
GET https://api.timtim.live/v1/events?changed_since=2026-10-06T10:00:00ZSe a resposta tiver next, envie de volta como cursor= para pegar a próxima página. Quando next estiver vazio, você já tem tudo.
GET https://api.timtim.live/v1/events?city=Paris&cursor=eyJtIjoiZCIs…Cada evento tem earn. Se earn.eligible for false, o evento não tem recompensa — mesmo assim vale a pena mostrar. Se for true, earn.description diz o que você ganha, por exemplo "$5 por ingresso elegível". Se a compra for reembolsada, a recompensa é estornada.
Salve um feed completo no seu painel e depois baixe todos os eventos dele em um só arquivo compactado: GET /v1/bulk/FEED_ID.ndjson.gz ou .csv.gz, com sua chave de servidor. Adicione ?changed_since= para receber só o que mudou, incluindo eventos retirados. Chaves de teste já podem testar; o uso real precisa de uma análise da TimTim.Live.
GET https://api.timtim.live/v1/bulk/bfs_YOURFEED.ndjson.gz?changed_since=2026-10-06T00:00:00ZParceiros grandes podem manter os compradores no próprio app. Peça GET /v1/events/EVENT_ID/tickets para ver o que está à venda e depois envie POST /v1/orders com a escolha do comprador. Você recebe um link de pagamento da TimTim.Live para abrir para o comprador; a venda é creditada direto à sua empresa. Chaves de teste já podem experimentar. O uso real precisa de uma revisão da TimTim.Live e de pagamentos com cartão ativados.
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 entrega cada evento que paga uma recompensa como uma oferta: o organizador, as datas em que dá para comprar, o preço, o lugar e a recompensa. Seu cliente ativa a oferta pelo seu link rastreado, e a recompensa é paga à sua empresa por /v1/earnings. Chaves de teste veem ofertas de exemplo. Ofertas reais precisam de uma revisão do TimTim.Live. Ligar pagamentos com cartão diretamente precisa de um acordo com uma bandeira de cartão ou um banco, e não está conectado.
GET https://api.timtim.live/v1/offers?country=USstatus é scheduled, postponed, rescheduled, cancelled, sold_out ou completed. tickets.availability é available, limited, sold_out, not_on_sale ou ended. Quando um evento é cancelado, tire ele do ar.
GET https://api.timtim.live/v1/events/evt_test_washington_konpaChaves de teste: 60 pedidos por minuto. Chaves reais: 120 por minuto. Mais rápido que isso, você recebe uma resposta 429 com Retry-After, o número de segundos para esperar.
Os eventos que os organizadores do TimTim.Live criam e escolhem compartilhar. Eventos que importamos de outros sites de ingressos nunca entram, porque não temos o direito de compartilhá-los.
Nomes de compradores, e-mails, endereços residenciais, telefones e dados de cartão. A Partner API compartilha informações de eventos, não nossos membros.
Uma só linha de HTML mostra eventos em qualquer site. Use uma chave de site (tt_pk_live_) e coloque seu site na lista de sites permitidos da chave. Sem chave, ele mostra eventos de exemplo.
<script src="https://timtim.live/widget/events.js"
data-key="tt_pk_live_YOUR_WEBSITE_KEY"
data-city="Washington" data-category="music" async></script>Opções: data-city, data-country, data-category, data-limit (1–24), data-earn="true", data-lang e data-color.
Opcional. Crie um cliente OAuth no seu painel. Depois troque o ID do cliente e o segredo por um token de acesso de uma hora, e envie esse token no lugar de uma chave. O segredo nunca viaja com suas chamadas à API, e você pode pedir menos permissões (scopes) do que o cliente tem.
# 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"Para encerrar um token antes, envie-o por POST para /v1/oauth/revoke com o mesmo ID do cliente e segredo. Desligar o cliente no seu painel encerra todos os tokens dele de uma vez.
Opcional. No seu painel, abra "Travar nos meus servidores" embaixo de uma chave de servidor, chave de teste ou cliente OAuth e escreva os endereços públicos dos seus servidores. Chamadas — e pedidos de token — de qualquer outro lugar são recusados com ip_not_allowed, mesmo com a chave certa.
Certificados de cliente (mTLS): ligue seu certificado de cliente TLS a uma chave e depois chame https://api.timtim.live com ele. Toda chamada precisa mostrar esse certificado; o handshake TLS prova que você tem a chave privada dele.
# 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"Usa WordPress? Instale o TimTim.Live Events: um bloco e um shortcode que mostram eventos com seus próprios links de ingressos do TimTim.Live. Ele é feito pelo TimTim.Live, só fala com o timtim.live e só se atualiza pelo timtim.live.
Envie o arquivo em Plugins → Adicionar novo → Enviar plugin. Cole sua chave de site em Configurações → TimTim.Live Events e clique em Test Connection. Depois adicione o bloco TimTim.Live Events a qualquer página.
Baixar o plugin para WordPress[timtim_events city="Washington" category="music" limit="6"]Os mesmos eventos em JSON Feed, RSS, XML, CSV ou em um calendário (.ics) que o Google Calendar, o Apple Calendar e o Outlook podem assinar. Leitores de feed não conseguem enviar cabeçalhos, então coloque uma chave de site ou uma chave de teste em ?key=. Nunca coloque uma chave de servidor em um 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=ParisColoque um endereço no seu painel e enviamos uma mensagem para ele quando algo muda: event.changed ou earnings.changed. Webhooks são opcionais — changed_since dá a mesma informação.
{
"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"
}
}
}Confira cada mensagem: ela é assinada com o seu segredo. Recuse tudo que tiver mais de cinco minutos e ignore um TimTim-Delivery-Id que você já tratou.
// 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);
});Responda com qualquer 2xx em até 10 segundos. Se não, tentamos de novo depois de 1 minuto, 5 minutos, 30 minutos, depois 2, 6, 12 e 24 horas, e então paramos. Nunca seguimos redirecionamentos.
Chaves de teste recebem eventos de exemplo marcados EVENTO DE TESTE — SEM DINHEIRO DE VERDADE. Abra um buy_url, toque em Comprar ingresso de teste e depois peça seus ganhos. Simule um reembolso e veja o estorno.
Os erros se explicam com palavras simples, com um título e o que fazer em seguida. Toda resposta traz um TimTim-Request-Id. Envie para nós e conseguimos achar seu pedido.
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.A descrição completa de cada campo, no formato OpenAPI que suas ferramentas conseguem ler.
Baixar openapi.yamlSua chave de teste funciona na hora. Para chaves live, uma pessoa do TimTim.Live olha o nome da sua empresa, o seu site e como você vai mostrar os eventos. Você vê a resposta no seu painel.
A versão 1 só cresce. Adicionamos coisas novas. Não removemos nem renomeamos o que já existe.
Nosso propósito
Convidamos todos a ajudar a deixar um legado para a humanidade.
Participe de três missões que sobreviverão a todos nós

Construa Esperança
Ajude cada família a ter um lugar para chamar de lar — financiado por OseloHelp.com, nossa organização sem fins lucrativos isenta de impostos.

Preservar a humanidade por meio da música
Preserve a música e as histórias da humanidade pelos próximos 1.000+ anos.

Inspire a próxima geração de exploradores
Torne a oportunidade de explorar o espaço acessível a todos.

O projeto de um avião espacial que decola de uma pista em vez de ser lançado por um foguete. É um conceito, não uma nave pronta.
Veja como funcionaComo tudo se conecta
Nada aqui é um negócio separado — cada etapa fortalece a próxima.
Um propósito. Diversos negócios que se reforçam.
Quer você ouça uma música, compartilhe uma história, use os produtos, vá a um show, traduza letras, recomende um país ou simplesmente conte a um amigo — você se torna parte de algo projetado para durar gerações.
Todos podem participar. Nenhuma contribuição é pequena demais.
TimTim.Live — Explore o mundo pela música.
Conectando pessoas em 195 países: atualmente 3.004.605+ páginas de artistas, a caminho de mais de 4 milhões · 8.684.002+ páginas de negócios, a caminho de 400 milhões · o site será traduzido para 417 idiomas locais em todo o mundo.
A TimTim.Live já mapeia 233.870 lugares em todos os 195 países, chegando a comunidades de apenas 1.000 habitantes, entre eles:
257 estados • 1.690 províncias • 4.808 condados • 41.161 distritos • 13.471 cidades • 117.896 vilas • 40.988 povoados
© 2026 TimTim.Live. Todos os direitos reservados.