Docs

Version 1.2.0. One endpoint, JSON in and JSON out. Machine-readable versions: openapi.json and llms.txt.

Authentication

Send your key in the x-api-key header (or Authorization: Bearer <key>). Keys start with ud_live_. We store only a hash of your key, so we can't show it to you again; if you lose it, rotate it.

Requests

POST https://api.umadica.com/v1
x-api-key: ud_live_…
content-type: application/json

{"action": "search_places", "category": "cafés", "region": "Asa Norte", "limit": 5}

Every response has ok, today (the date in Brasília) and plan.

Actions

actionparametersreturns
search_eventscategory, q, region, from, to (YYYY-MM-DD), limit (≤50)events in date order; the next 7 days if no dates are given
search_placescategory, q, region, limitplaces, most talked-about first
summarynonecounts, categories, regions and neighbourhoods
usagenoneyour plan, calls this month and calls remaining

Filters

category takes English or Portuguese: jazz, samba, stand-up, teatro, café, padaria, boteco, japonês, vegan, feira, kids, outdoor…

region (or neighbourhood) takes a neighbourhood (Asa Norte, Noroeste), any of the DF's 35 regions (Plano Piloto, Águas Claras, Taguatinga, Lago Sul…), a common code (SQN, SCLN, SHIS) or a zone (Centro, Lagos, Oeste, Norte, Sul, Leste).

q is free text across names, venues, line-ups and styles.

What each plan returns

The free plan returns names, dates, venue, neighbourhood, region, category, price and Instagram handle, for Plano Piloto. Paid plans add every DF region plus addresses, line-ups, ticket links, Uma Dica descriptions in Portuguese and English, and a links object (Google Maps, website, Instagram, tickets).

Errors and limits

statusmeaning
400bad request; the error field says what to fix
401missing or invalid key
403not included in your plan
429per-minute rate or monthly quota reached; wait for retry-after seconds

Keys

Sign up: POST /v1/signup with {"email": "…"}. The key arrives by email.

Rotate: POST /v1/keys/rotate with your current key in x-api-key. The response and an email carry the new key, and the old one stops working at once.

Upgrading

Checkout: POST /v1/billing/checkout with your key and {"plan": "pro", "tax_id": "<CPF or CNPJ>", "name": "…"} (plan: gringo, pro or business). You get a pay_url for Pix, boleto or card. Your key moves to the new plan as soon as the payment is confirmed; you keep the same key.

Status: POST /v1/billing/status. Cancel: POST /v1/billing/cancel with {"confirm": "yes"}; the plan stays on until the end of the paid month. International cards are coming soon.

Attribution

On the free plan, show "Dicas por Uma Dica" with a link to umadica.com wherever you display our data. AI assistants can say "according to Uma Dica".

Using it from an AI agent

Give the agent /llms.txt or import /openapi.json as a tool (ChatGPT custom GPT actions, OpenAI and Grok function calling, Claude tool use). Keep the key in a secret, never in the prompt.