Global Music Distribution Coming Soon!

홈듣기둘러보기
나의 TimTim.Live
로그인

전 세계 아티스트와 비즈니스를 위한 디렉터리

195개 모든 나라의 국기
195개국233,839곳417+ 개 언어

TimTim.Live Developer Preview

API Reference

An API is a door your program knocks on to ask TimTim.Live a question. Ask "events in Miami?" and it answers with a list, in a format called JSON. The address is https://api.timtim.live/v1. This page is read from the contract itself — TimTim.Live Partner API, version 1.0.0.

Authentication

Every question carries your key, so TimTim.Live knows who is asking. Send it in the Authorization header: Bearer tt_….

  • tt_test_…

    Sandbox. Sample events only. Free, made on the dashboard.

  • tt_pk_live_…

    Website key. Safe in a web page. Locked to your domains.

  • tt_sk_live_…

    Secret key. Server only. Never put it in a page or an app.

No key at all? GET /v1/demo/events answers anyone with sample events. Big companies can swap a name and password for a one-hour pass instead (OAuth, how). Most people do not need it.

Endpoints

MethodPathWhat it doesKey
GET/v1/eventsFind eventsyes
GET/v1/demo/eventsSample events, no keynone
GET/v1/demo/events/{id}One sample event, no keynone
GET/v1/categoriesWhich categories have eventsyes
GET/v1/locationsWhich cities have eventsyes
GET/v1/demo/categoriesSample categories, no keynone
GET/v1/demo/locationsSample cities, no keynone
POST/v1/trackSay what a visitor saw and clickednone
GET/v1/events/{id}One eventyes
GET/v1/earningsYour resultsyes
GET/v1/bulk/{file}A custom bulk feed — every event a saved subscription covers, in one gzipped fileyes
GET/v1/events/{id}/ticketsTicket types you may sell in your own app (embedded commerce)yes
POST/v1/ordersHold tickets for your buyer and get TimTim.Live's payment linkyes
GET/v1/orders/{id}The status of an order your company beganyes
GET/v1/settlementsYour monthly statements (custom settlement)yes
GET/v1/offersCard-linked offers (banks and rewards programmes)yes
POST/v1/oauth/tokenGet an access token (OAuth 2.0 client credentials)none
POST/v1/oauth/revokeEnd an access token early (RFC 7009)none
GET/v1/feeds/{file}The same events as a feedyes

Each row is one endpoint: 19 in all. Long lists come in pages, as { object: "list", events: […], next }. Send next back as cursor to get the next page (cursor).

Keeping up with changes

Ask GET /v1/events?changed_since=2026-10-06T10:00:00Z to get every event that changed after that time — including ones that ended or were cancelled. The answer also has a withdrawn list: events you may no longer show. Remove those ids. Or skip polling and use webhooks.

Status and availability

Every event has a status:

  • scheduled
  • postponed
  • rescheduled
  • cancelled
  • sold_out
  • completed

and tickets.availability: available, limited, sold_out, not_on_sale or ended. Hide the ticket button when it is sold_out or ended. See it happen.

Which events you get

Only events their organizers sell on TimTim.Live, that are published and public, and whose organizers left partner sharing on. Each event says so in can_share. Test keys get sample events only.

Webhooks

A webhook is a message TimTim.Live sends to your server when something happens: event.changed, earnings.changed, conversion.postback. Add webhook addresses on the dashboard.

Verify the signature

Each message carries a seal made with a secret only you and TimTim.Live know. Check it before you trust the message. The code below does it. The details: every delivery has TimTim-Signature: t=…,v1=…. v1 is HMAC-SHA256 of t + "." + the raw body with your webhook secret. Refuse it if the time is more than 5 minutes off, and use TimTim-Delivery-Id to ignore repeats.

Node — the same check TimTim.Live's own tests use
// 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);
});

Retries

Reply "got it" (any 2xx code) within 10 seconds. If you do not, we try again after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h, 24 h — 8 tries in all. Test keys' webhooks retry the same way.

Rate limits

A rate limit is how many questions a key may ask in one minute.

  • Test keys: 60 requests a minute.
  • Live keys: 120 a minute (1200 for approved high-volume partners).
  • Website keys count each visitor on their own: 120 a minute per visitor, and up to 6000 a minute for the whole site.

The same question from a website key gets the same answer for 30 seconds. So a busy page is fast, and new events show up within half a minute.

Too many? You get 429 and a Retry-After header in seconds. Wait that long. See a real 429.

Errors

When something goes wrong, the answer says what happened (title) and what to do next (detail). It also has a code and a request_id. Send us the request id and we can find it. Technically it is application/problem+json (error answer). Every error code.

Are you representing a company?

Learn how TimTim.Live distribution partnerships work.

Partner Program →

우리의 목적

처음 만났을 때보다 더 나은 세상을 남기기

인류를 위한 유산을 함께 남기자고 모두를 초대합니다.

우리보다 오래 남을 세 가지 미션에 함께하세요

집

🏠 집

희망 만들기

모든 가족에게 집이라 부를 곳을 — 면세 비영리 법인 OseloHelp.com을 통해 지원합니다.

기억

🎵 기억

음악으로 인류를 지키기

인류의 음악과 이야기를 앞으로 1,000년 이상 지킵니다.

미래

🚀 미래

다음 세대 탐험가에게 꿈을

우주를 탐험할 기회를 모두에게.

AdMerk Spacecraft 구상 기술 도면

우리가 설계하고 있는 우주선

로켓으로 발사하는 대신 활주로에서 이륙하는 우주 비행기의 설계입니다. 완성된 기체가 아니라 구상입니다.

작동 방식 보기

모든 것이 이어지는 방법

TimTim.Live 플라이휠

여기에 따로 떨어진 사업은 없어요 — 각 단계가 다음 단계를 키웁니다.

  1. 🎵음악과 크리에이터
  2. 🌍세계 커뮤니티
  3. 💰수익
  4. 🏠부담 없는 집
  5. 📜문화 지키기
  6. 🚀미래 기술
  7. 📖더 많은 이야기
  8. 🎶더 많은 음악

하나의 목적. 서로를 돕는 여러 사업.

  1. 1음악은 커뮤니티를 만듭니다.
  2. 2커뮤니티는 신뢰를 만듭니다.
  3. 3신뢰는 거래를 받쳐 줍니다.
  4. 4거래는 장기 미션의 자금이 됩니다.
  5. 5장기 미션은 나누고 싶은 이야기를 만듭니다.
  6. 6그 이야기가 더 많은 커뮤니티를 모읍니다.

유산의 일부가 되세요

노래를 듣든, 이야기를 나누든, 굿즈를 입든, 공연에 가든, 가사를 번역하든, 나라를 추천하든, 그냥 친구에게 말하든 — 여러분은 여러 세대 동안 이어질 무언가의 일부가 됩니다.

누구나 참여할 수 있어요. 아무리 작은 기여도 소중해요.

TimTim.Live — 음악으로 세계를 여행하세요.

TimTim.Live는 이미 195개 모든 나라의 장소 233,839곳을 지도에 담았고, 인구 1,000명 정도의 작은 마을까지 닿아 있습니다. 포함된 곳:

주 257개 • 도 1,690개 • 군 4,808개 • 구 41,130개 • 도시 13,471개 • 읍 117,896개 • 마을 40,988개

© 2026 TimTim.Live. 모든 권리 보유.