Send us your events
For organisers, venues and platforms who want their events on tuka.events. A curator reviews every event before it goes on the site.
How to become a vendor
We set up each vendor by hand; there is no self-service sign-up. Write to [email protected]: who you are, your city and the events you run, a link to your site, and how you would like to send them. We will send you a personal address, an API key, or both.
Three ways in
Write in your own words to your personal address. Nothing to set up.
API with plain text
Send the description through the API, and we turn it into events.
API with fields
Send each event as structured data from your own system.
You get an address like [email protected]. Write to it as you would to a person: the programme in the body, a poster or a PDF attached. Say the name, date, time and place. You can report changes the same way: a new time, a cancellation, an extra date.
API
Base URL: https://vendors.tuka.events/api/v1. Full schema: openapi.json (OpenAPI 3.1). Send your key in a header on every request, and keep it like a password. Test it with GET /api/v1/me, which stores nothing:
curl https://vendors.tuka.events/api/v1/me \
-H "Authorization: Bearer $TUKA_API_KEY"
Plain text: POST /api/v1/letters
The simplest way. One request can describe many events.
curl https://vendors.tuka.events/api/v1/letters \
-H "Authorization: Bearer $TUKA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"subject": "December programme",
"text": "12 December, 20:00, Sofia Live Club: Jazz Night. Tickets from 15 EUR."}'
An event: POST /api/v1/events
title and starts_at are required. The title needs only one of bg, en, ru; we write the others. The time is local, with no offset. If you do not know the hour, send the date alone. One request is one date.
curl https://vendors.tuka.events/api/v1/events \
-H "Authorization: Bearer $TUKA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": {"en": "Jazz Night"},
"starts_at": "2026-12-12T20:00",
"city": "sofia",
"venue": {"name": "Sofia Live Club", "address": "1 Vitosha Blvd"},
"url": "https://example.com/jazz-night",
"price": {"from": 15, "currency": "EUR"}}'
A venue: POST /api/v1/venues
Only for a venue with no event yet: an event names its own venue. name is required.
Responses
| Status | Meaning |
|---|---|
202 | Accepted and stored. It usually reaches a curator within two hours. |
200 | The same content was already accepted ("duplicate": true). Re-sending is safe. |
401 | The key is invalid or revoked. |
422 | error.fields names each problem. Nothing was stored. |
429 | Over about 30 requests a minute. Wait Retry-After seconds. |
503 | Nothing was stored. Retry in a minute. |
Compatibility. /api/v1 will not change incompatibly. New optional fields and new endpoints may appear, and unknown request fields are ignored. A change that would break an integration goes in a new version.
