<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Alexander Prokofiev</title>
    <description>The latest articles on Forem by Alexander Prokofiev (@revan_dondego).</description>
    <link>https://forem.com/revan_dondego</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3846765%2F20d98fa5-7a54-473e-a8d8-59b7c31f3954.png</url>
      <title>Forem: Alexander Prokofiev</title>
      <link>https://forem.com/revan_dondego</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/revan_dondego"/>
    <language>en</language>
    <item>
      <title>Making a Local Events API Discoverable to Developers and AI Assistants</title>
      <dc:creator>Alexander Prokofiev</dc:creator>
      <pubDate>Thu, 21 May 2026 23:14:32 +0000</pubDate>
      <link>https://forem.com/revan_dondego/making-a-local-events-api-discoverable-to-developers-and-ai-assistants-4i07</link>
      <guid>https://forem.com/revan_dondego/making-a-local-events-api-discoverable-to-developers-and-ai-assistants-4i07</guid>
      <description>&lt;p&gt;Local cultural data should not only live as web pages.&lt;br&gt;
That is the idea behind the public discovery layer we just shipped for the DondeGo API.&lt;br&gt;
DondeGo is a local discovery platform for Barcelona and Madrid, focused on events, places, cultural life, and local news. We are building it as a media and discovery product, but we also want the data surface to be understandable by developers, API clients, documentation tools, and AI assistants.&lt;br&gt;
So instead of only publishing a human-readable API page, we built a small discovery package around the API.&lt;br&gt;
It includes OpenAPI, llms.txt, an API Catalog linkset, Postman documentation, examples, and a documentation-only Agent Skills index.&lt;br&gt;
The goal is simple:&lt;br&gt;
make the API easier to discover, understand, cite, and use without pretending to support capabilities that do not exist yet.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is live
&lt;/h2&gt;

&lt;p&gt;Here are the main public entry points.&lt;br&gt;
OpenAPI 3.1:&lt;br&gt;
&lt;a href="https://dondego.es/openapi.json" rel="noopener noreferrer"&gt;https://dondego.es/openapi.json&lt;/a&gt;&lt;br&gt;
llms.txt:&lt;br&gt;
&lt;a href="https://dondego.es/llms.txt" rel="noopener noreferrer"&gt;https://dondego.es/llms.txt&lt;/a&gt;&lt;br&gt;
API Catalog linkset:&lt;br&gt;
&lt;a href="https://dondego.es/.well-known/api-catalog" rel="noopener noreferrer"&gt;https://dondego.es/.well-known/api-catalog&lt;/a&gt;&lt;br&gt;
Rich DondeGo discovery JSON:&lt;br&gt;
&lt;a href="https://dondego.es/api-catalog.json" rel="noopener noreferrer"&gt;https://dondego.es/api-catalog.json&lt;/a&gt;&lt;br&gt;
Documentation-only Agent Skills index:&lt;br&gt;
&lt;a href="https://dondego.es/.well-known/agent-skills/index.json" rel="noopener noreferrer"&gt;https://dondego.es/.well-known/agent-skills/index.json&lt;/a&gt;&lt;br&gt;
Postman documentation:&lt;br&gt;
&lt;a href="https://documenter.getpostman.com/view/55094507/2sBXwjvZRZ" rel="noopener noreferrer"&gt;https://documenter.getpostman.com/view/55094507/2sBXwjvZRZ&lt;/a&gt;&lt;br&gt;
GitHub repository:&lt;br&gt;
&lt;a href="https://github.com/revanbcn/DondeGo-API" rel="noopener noreferrer"&gt;https://github.com/revanbcn/DondeGo-API&lt;/a&gt;&lt;br&gt;
The repository also includes server-side examples for curl, Python, and Node:&lt;br&gt;
&lt;a href="https://github.com/revanbcn/DondeGo-API/tree/main/examples" rel="noopener noreferrer"&gt;https://github.com/revanbcn/DondeGo-API/tree/main/examples&lt;/a&gt;&lt;br&gt;
And a ready-to-import Postman Collection:&lt;br&gt;
&lt;a href="https://github.com/revanbcn/DondeGo-API/tree/main/postman" rel="noopener noreferrer"&gt;https://github.com/revanbcn/DondeGo-API/tree/main/postman&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why not just publish OpenAPI?
&lt;/h2&gt;

&lt;p&gt;OpenAPI is the most important artifact, but it is not the whole discovery story.&lt;br&gt;
Different tools look for different signals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;developers want examples and a clear README&lt;/li&gt;
&lt;li&gt;API clients want OpenAPI&lt;/li&gt;
&lt;li&gt;Postman users want a collection&lt;/li&gt;
&lt;li&gt;LLM-oriented tools can benefit from llms.txt&lt;/li&gt;
&lt;li&gt;API discovery systems can use a linkset&lt;/li&gt;
&lt;li&gt;agents need short, explicit usage guidance&lt;/li&gt;
&lt;li&gt;partners need attribution and usage rules
So the discovery layer is intentionally made of several small, stable surfaces instead of one giant documentation page.
## Verified endpoint families
The current OpenAPI v0.1 spec is intentionally conservative.
It documents only endpoint families we have verified and are ready to describe clearly:
&lt;code&gt;GET /locations/
GET /events/
GET /events/{id}/
GET /places/
GET /places/{id}/
GET /news/
GET /news/{id}/
GET /events-of-the-day/
GET /search/?q=...&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We did not add endpoints just because they might exist somewhere.&lt;/p&gt;

&lt;p&gt;We did not document parameters that still need verification.&lt;/p&gt;

&lt;p&gt;We did not generate a huge speculative spec.&lt;/p&gt;

&lt;p&gt;The goal of v0.1 is to describe what can be described accurately.&lt;/p&gt;

&lt;p&gt;Quick example&lt;/p&gt;

&lt;p&gt;The public API base is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dondego.es/public-api/v1.4" rel="noopener noreferrer"&gt;https://dondego.es/public-api/v1.4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;List supported locations:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -s https://dondego.es/public-api/v1.4/locations/ | jq&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;List a few Barcelona event summaries:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -s "https://dondego.es/public-api/v1.4/events/?location=barcelona&amp;amp;page_size=3" | jq&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Fetch event details:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://dondego.es/public-api/v1.4/events/{id}/?expand=place,images,dates,categories,tags,participants"&lt;/span&gt; | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More complete examples are available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/revanbcn/DondeGo-API/tree/main/examples" rel="noopener noreferrer"&gt;https://github.com/revanbcn/DondeGo-API/tree/main/examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The detail-first attribution rule&lt;/p&gt;

&lt;p&gt;One important rule in the current API is event attribution.&lt;/p&gt;

&lt;p&gt;Event list rows are useful for discovery, but they do not expose everything needed for safe public rendering. In particular, list rows do not expose the canonical DondeGo event page URL.&lt;/p&gt;

&lt;p&gt;For public event rendering, the rule is:&lt;/p&gt;

&lt;p&gt;event list -&amp;gt; fetch event detail -&amp;gt; use EventDetail.site_url as the visible DondeGo source link&lt;/p&gt;

&lt;p&gt;This matters because any public website, app, newsletter, bot, AI assistant, or partner integration that displays DondeGo event descriptions or substantial DondeGo event data must include a visible direct link to the canonical DondeGo.es event page as the source.&lt;/p&gt;

&lt;p&gt;That rule is repeated across the docs, examples, Postman collection, llms.txt, and API catalog.&lt;/p&gt;

&lt;p&gt;It is not just a legal or SEO detail. It is part of making local data trustworthy.&lt;/p&gt;

&lt;p&gt;If a user sees an event recommendation in an app or assistant, they should be able to click through to the original canonical page.&lt;/p&gt;

&lt;p&gt;llms.txt&lt;/p&gt;

&lt;p&gt;We publish:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dondego.es/llms.txt" rel="noopener noreferrer"&gt;https://dondego.es/llms.txt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This file is a short LLM-oriented index.&lt;/p&gt;

&lt;p&gt;It points to the most important resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what DondeGo is&lt;/li&gt;
&lt;li&gt;what the public API covers&lt;/li&gt;
&lt;li&gt;where the OpenAPI spec lives&lt;/li&gt;
&lt;li&gt;where the API Catalog lives&lt;/li&gt;
&lt;li&gt;where examples live&lt;/li&gt;
&lt;li&gt;what attribution rule must be followed&lt;/li&gt;
&lt;li&gt;what is not supported yet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does not magically make every model use the API.&lt;/p&gt;

&lt;p&gt;But it gives AI systems and developer tools a clear, stable, crawlable reference.&lt;/p&gt;

&lt;p&gt;API Catalog linkset&lt;/p&gt;

&lt;p&gt;We also publish:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dondego.es/.well-known/api-catalog" rel="noopener noreferrer"&gt;https://dondego.es/.well-known/api-catalog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is served as:&lt;/p&gt;

&lt;p&gt;application/linkset+json&lt;/p&gt;

&lt;p&gt;It links to the core discovery resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAPI&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;llms.txt&lt;/li&gt;
&lt;li&gt;attribution policy&lt;/li&gt;
&lt;li&gt;examples&lt;/li&gt;
&lt;li&gt;version history&lt;/li&gt;
&lt;li&gt;richer DondeGo discovery JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The richer DondeGo-specific JSON is available separately:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dondego.es/api-catalog.json" rel="noopener noreferrer"&gt;https://dondego.es/api-catalog.json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This split is intentional.&lt;/p&gt;

&lt;p&gt;The .well-known/api-catalog route is a compact machine-readable linkset. The /api-catalog.json route carries richer DondeGo-specific context.&lt;/p&gt;

&lt;p&gt;Documentation-only Agent Skills&lt;/p&gt;

&lt;p&gt;We also publish a documentation-only Agent Skills index:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dondego.es/.well-known/agent-skills/index.json" rel="noopener noreferrer"&gt;https://dondego.es/.well-known/agent-skills/index.json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important part is “documentation-only”.&lt;/p&gt;

&lt;p&gt;There are no scripts. No executable code. No hidden tool access. No permission escalation. No OAuth. No MCP transport.&lt;/p&gt;

&lt;p&gt;The skill exists to teach an AI agent how to discover and correctly use the DondeGo public API documentation.&lt;/p&gt;

&lt;p&gt;It explains the stable discovery URLs, verified endpoint families, attribution requirement, and detail-first event rendering rule.&lt;/p&gt;

&lt;p&gt;What we intentionally do not advertise&lt;/p&gt;

&lt;p&gt;This is probably the most important architectural decision in the whole package.&lt;/p&gt;

&lt;p&gt;We do not advertise OAuth or OIDC support, because DondeGo does not currently run an OAuth issuer.&lt;/p&gt;

&lt;p&gt;We do not publish OAuth Protected Resource Metadata, because the current public discovery package does not expose OAuth-protected scopes.&lt;/p&gt;

&lt;p&gt;We do not claim to have an MCP server.&lt;/p&gt;

&lt;p&gt;We do not claim to have WebMCP tools.&lt;/p&gt;

&lt;p&gt;We do not document date filters or the limit parameter in OpenAPI v0.1, because those still need separate verification.&lt;/p&gt;

&lt;p&gt;We do not publish browser-only examples yet, because CORS behavior should be handled deliberately, not assumed.&lt;/p&gt;

&lt;p&gt;Accurate discovery metadata is more useful than fake “agent-ready” metadata.&lt;/p&gt;

&lt;p&gt;If a site publishes machine-readable discovery files, those files should describe real capabilities.&lt;/p&gt;

&lt;p&gt;Postman documentation&lt;/p&gt;

&lt;p&gt;For developers who prefer Postman, we published public documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://documenter.getpostman.com/view/55094507/2sBXwjvZRZ" rel="noopener noreferrer"&gt;https://documenter.getpostman.com/view/55094507/2sBXwjvZRZ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository also includes a ready-to-import Postman Collection v2.1:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/revanbcn/DondeGo-API/tree/main/postman" rel="noopener noreferrer"&gt;https://github.com/revanbcn/DondeGo-API/tree/main/postman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The collection uses only public GET requests. It does not include environments, secrets, API keys, cookies, bearer tokens, or OAuth settings.&lt;/p&gt;

&lt;p&gt;What this enables&lt;/p&gt;

&lt;p&gt;This discovery layer is useful for several types of builders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local newsletters that want to enrich issues with cultural events&lt;/li&gt;
&lt;li&gt;city guides that need venues and event details&lt;/li&gt;
&lt;li&gt;travel or lifestyle apps building a Barcelona or Madrid experience layer&lt;/li&gt;
&lt;li&gt;AI assistants that need structured local data instead of guessing&lt;/li&gt;
&lt;li&gt;developers who want to explore the API through OpenAPI or Postman&lt;/li&gt;
&lt;li&gt;partners who need clear attribution rules before building on the data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The package is not a huge platform launch.&lt;/p&gt;

&lt;p&gt;It is a foundation.&lt;/p&gt;

&lt;p&gt;But I think this foundation matters.&lt;/p&gt;

&lt;p&gt;Local media and cultural platforms should be easier to integrate with. They should publish machine-readable contracts. They should be understandable by AI-assisted tools. And they should be clear about attribution.&lt;/p&gt;

&lt;p&gt;That is the direction we are taking with DondeGo.&lt;/p&gt;

&lt;p&gt;Start here&lt;/p&gt;

&lt;p&gt;GitHub repository:&lt;br&gt;
&lt;a href="https://github.com/revanbcn/DondeGo-API" rel="noopener noreferrer"&gt;https://github.com/revanbcn/DondeGo-API&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live OpenAPI:&lt;br&gt;
&lt;a href="https://dondego.es/openapi.json" rel="noopener noreferrer"&gt;https://dondego.es/openapi.json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Postman documentation:&lt;br&gt;
&lt;a href="https://documenter.getpostman.com/view/55094507/2sBXwjvZRZ" rel="noopener noreferrer"&gt;https://documenter.getpostman.com/view/55094507/2sBXwjvZRZ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;llms.txt:&lt;br&gt;
&lt;a href="https://dondego.es/llms.txt" rel="noopener noreferrer"&gt;https://dondego.es/llms.txt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API Catalog:&lt;br&gt;
&lt;a href="https://dondego.es/.well-known/api-catalog" rel="noopener noreferrer"&gt;https://dondego.es/.well-known/api-catalog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are building a local guide, AI assistant, cultural newsletter, events app, map product, or city discovery experience for Barcelona or Madrid, I would be happy to talk.&lt;/p&gt;

&lt;p&gt;Partner access and integration discussions:&lt;br&gt;
&lt;strong&gt;&lt;a href="mailto:bcn@dondego.es"&gt;bcn@dondego.es&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>webdev</category>
      <category>openapi</category>
    </item>
    <item>
      <title>First real use case of the DondeGo API: daily event picks for Barcelona and Madrid</title>
      <dc:creator>Alexander Prokofiev</dc:creator>
      <pubDate>Mon, 04 May 2026 11:24:36 +0000</pubDate>
      <link>https://forem.com/dondego/first-real-use-case-of-the-dondego-api-daily-event-picks-for-barcelona-and-madrid-2m0</link>
      <guid>https://forem.com/dondego/first-real-use-case-of-the-dondego-api-daily-event-picks-for-barcelona-and-madrid-2m0</guid>
      <description>&lt;p&gt;We have reached a small but important milestone for DondeGo API.&lt;/p&gt;

&lt;p&gt;The first working use case is already live: we are using our API to power daily event selections for two local projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x.com/HoyBcn" rel="noopener noreferrer"&gt;https://x.com/HoyBcn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/EnMadridHoy" rel="noopener noreferrer"&gt;https://x.com/EnMadridHoy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is simple: every day, the system uses DondeGo data to select some of the best events happening today in Barcelona and Madrid.&lt;/p&gt;

&lt;p&gt;Instead of manually searching across dozens of pages, calendars and sources, we can now use a structured local data layer with events, cities, dates, categories and editorial signals. This makes it much easier to build useful local discovery products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A local event project usually needs three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fresh event data&lt;/li&gt;
&lt;li&gt;A way to filter it by city, date and category&lt;/li&gt;
&lt;li&gt;Enough structure to build products on top of it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is exactly what we are building with DondeGo API.&lt;/p&gt;

&lt;p&gt;For our own use case, the API helps us answer questions like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is happening in Barcelona today?&lt;br&gt;
What are the most interesting events in Madrid today?&lt;br&gt;
Which events are good enough to recommend?&lt;br&gt;
How can we turn local data into a useful daily feed?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is still an early version, but it already shows the direction clearly.&lt;/p&gt;

&lt;p&gt;DondeGo API is not just a technical experiment. It is becoming a practical content layer for local discovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to build something with events in Barcelona or Madrid?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are building a project about events, culture, local plans, maps, newsletters or city discovery in Barcelona or Madrid, we would be happy to share the data with you for free.&lt;/p&gt;

&lt;p&gt;The only thing we ask is simple:&lt;br&gt;
&lt;em&gt;Please link back to DondeGo as the source.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That helps us keep building the project, improve the data and support independent local media.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Possible use cases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can use DondeGo API to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local event newsletters&lt;/li&gt;
&lt;li&gt;city guides&lt;/li&gt;
&lt;li&gt;interactive maps&lt;/li&gt;
&lt;li&gt;Telegram or WhatsApp bots&lt;/li&gt;
&lt;li&gt;daily event feeds&lt;/li&gt;
&lt;li&gt;cultural recommendation tools&lt;/li&gt;
&lt;li&gt;“what to do today” pages&lt;/li&gt;
&lt;li&gt;travel and expat guides&lt;/li&gt;
&lt;li&gt;niche projects for families, concerts, exhibitions or free events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are especially interested in small independent projects, local builders and media experiments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/revanbcn/DondeGo-API" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/HoyBcn" rel="noopener noreferrer"&gt;Daily Barcelona events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/EnMadridHoy" rel="noopener noreferrer"&gt;Daily Madrid events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dondego.es/" rel="noopener noreferrer"&gt;DondeGo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to test the API or build something with local event data for Barcelona or Madrid, feel free to contact us.&lt;/p&gt;

&lt;p&gt;We would love to see more projects using structured local data to make city life easier to discover.&lt;/p&gt;

</description>
      <category>api</category>
      <category>madrid</category>
      <category>barcelona</category>
      <category>eventsinyourcity</category>
    </item>
    <item>
      <title>We’re opening our events &amp; local news API for Barcelona and Madrid. Free to use for side projects and products – the only requirement is a visible link back to the source.</title>
      <dc:creator>Alexander Prokofiev</dc:creator>
      <pubDate>Fri, 27 Mar 2026 22:47:56 +0000</pubDate>
      <link>https://forem.com/revan_dondego/were-opening-our-events-local-news-api-for-barcelona-and-madrid-free-to-use-for-side-projects-1ja5</link>
      <guid>https://forem.com/revan_dondego/were-opening-our-events-local-news-api-for-barcelona-and-madrid-free-to-use-for-side-projects-1ja5</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dondego/we-built-an-api-for-events-places-and-local-news-in-barcelona-and-madrid-1409" class="crayons-story__hidden-navigation-link"&gt;We built an API for events, places, and local news in Barcelona and Madrid&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/dondego"&gt;
            &lt;img alt="API for events in Madrid and Barcelona logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F12840%2F37d62ad3-34a2-4106-8c8f-f313711c89c0.jpg" class="crayons-logo__image" width="600" height="600"&gt;
          &lt;/a&gt;

          &lt;a href="/revan_dondego" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3846765%2F20d98fa5-7a54-473e-a8d8-59b7c31f3954.png" alt="revan_dondego profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/revan_dondego" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Alexander Prokofiev
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Alexander Prokofiev
                
              
              &lt;div id="story-author-preview-content-3417174" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/revan_dondego" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3846765%2F20d98fa5-7a54-473e-a8d8-59b7c31f3954.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Alexander Prokofiev&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/dondego" class="crayons-story__secondary fw-medium"&gt;API for events in Madrid and Barcelona&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/dondego/we-built-an-api-for-events-places-and-local-news-in-barcelona-and-madrid-1409" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 27&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dondego/we-built-an-api-for-events-places-and-local-news-in-barcelona-and-madrid-1409" id="article-link-3417174"&gt;
          We built an API for events, places, and local news in Barcelona and Madrid
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/barcelona"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;barcelona&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/madrid"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;madrid&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opendata"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opendata&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dondego/we-built-an-api-for-events-places-and-local-news-in-barcelona-and-madrid-1409" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dondego/we-built-an-api-for-events-places-and-local-news-in-barcelona-and-madrid-1409#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>api</category>
      <category>barcelona</category>
      <category>madrid</category>
      <category>opendata</category>
    </item>
    <item>
      <title>We built an API for events, places, and local news in Barcelona and Madrid</title>
      <dc:creator>Alexander Prokofiev</dc:creator>
      <pubDate>Fri, 27 Mar 2026 22:34:02 +0000</pubDate>
      <link>https://forem.com/dondego/we-built-an-api-for-events-places-and-local-news-in-barcelona-and-madrid-1409</link>
      <guid>https://forem.com/dondego/we-built-an-api-for-events-places-and-local-news-in-barcelona-and-madrid-1409</guid>
      <description>&lt;h2&gt;
  
  
  Building a local API for events, places, and news in Barcelona and Madrid &lt;a href="https://github.com/revanbcn/DondeGo-API" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Most city products run into the same problem sooner or later.&lt;/p&gt;

&lt;p&gt;You want to answer simple questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is happening today?&lt;/li&gt;
&lt;li&gt;What is near these coordinates?&lt;/li&gt;
&lt;li&gt;Which places belong to this category?&lt;/li&gt;
&lt;li&gt;Which local news is still actually relevant?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But once you start building, local data is rarely clean enough. Events, places, and news often live in separate systems, use different filters, and do not map well to the way people actually explore a city.&lt;/p&gt;

&lt;p&gt;That is one of the reasons we started opening up the data layer behind DondeGo.&lt;/p&gt;

&lt;p&gt;DondeGo is a local media and city guide focused on &lt;strong&gt;Barcelona&lt;/strong&gt; and &lt;strong&gt;Madrid&lt;/strong&gt;. The editorial side is built around practical discovery: things to do, places to know, and local news that matters in city life. Recently, we have been turning more of that into an API that can be reused in real products.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the API is trying to solve
&lt;/h2&gt;

&lt;p&gt;The goal is not to build a huge generic directory.&lt;/p&gt;

&lt;p&gt;The goal is to make local urban content easier to work with for developers, editorial teams, maps, newsletters, recommendation tools, and city-focused products.&lt;/p&gt;

&lt;p&gt;Right now the API is centered around three main object types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;events&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;places&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;news&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes it possible to support workflows like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;showing events happening today in Madrid&lt;/li&gt;
&lt;li&gt;finding places within a radius from a point on the map&lt;/li&gt;
&lt;li&gt;filtering objects by tags or categories&lt;/li&gt;
&lt;li&gt;returning only current news items&lt;/li&gt;
&lt;li&gt;building city guides or local recommendation layers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recent changes in v0.1.0
&lt;/h2&gt;

&lt;p&gt;We have just published &lt;strong&gt;v0.1.0&lt;/strong&gt;, partly because I wanted the project to have a visible public milestone and partly because the API has become much more usable recently.&lt;/p&gt;

&lt;p&gt;A few of the changes included in this version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;daily events now also include films&lt;/li&gt;
&lt;li&gt;daily events can now return a title override&lt;/li&gt;
&lt;li&gt;event and place categories now expose identifiers&lt;/li&gt;
&lt;li&gt;filtering by tag slugs is supported via &lt;code&gt;tags&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;news now supports an &lt;code&gt;actual_only&lt;/code&gt; filter for current items&lt;/li&gt;
&lt;li&gt;event date serialization now includes:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;start_date&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;start_time&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end_date&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end_time&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is_continuous&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is_endless&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is_startless&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schedules&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;image serialization now includes authorship&lt;/li&gt;

&lt;li&gt;it is now possible to fetch only films with free screenings&lt;/li&gt;

&lt;li&gt;it is now possible to fetch only places with free events&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;is_free&lt;/code&gt; is now interpreted more strictly&lt;/li&gt;

&lt;li&gt;categories for events and places can now be disabled in collection responses&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;None of this is especially flashy, but it moves the API closer to being something that is genuinely usable in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The kind of queries we care about
&lt;/h2&gt;

&lt;p&gt;The API is most useful when it reflects how people actually navigate a city.&lt;/p&gt;

&lt;p&gt;For example, a basic daily query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/v1/events/?location=madrid&amp;amp;date=hoy
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A proximity-based query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/v1/events/?lat=40.4168&amp;amp;lon=-3.7038&amp;amp;radius=3000&amp;amp;date=hoy
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And place discovery around a point:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/v1/places/?lat=41.3874&amp;amp;lon=2.1686&amp;amp;radius=2000
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That may sound simple, but in practice this is the layer many local products need most.&lt;/p&gt;

&lt;p&gt;Not “all possible city data”, but structured answers to questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what can I do today?&lt;/li&gt;
&lt;li&gt;what is nearby?&lt;/li&gt;
&lt;li&gt;what is free?&lt;/li&gt;
&lt;li&gt;what is still current?&lt;/li&gt;
&lt;li&gt;what belongs to this area or category?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I find local APIs interesting
&lt;/h2&gt;

&lt;p&gt;There are many great APIs in the world, but local discovery still feels oddly underserved.&lt;/p&gt;

&lt;p&gt;A lot of the difficulty is not in storing records. It is in making the data useful in the context of a real city. Dates matter. Geography matters. Editorial freshness matters. Category structure matters. Free vs paid matters. Sometimes a simple “today” filter matters more than a complex taxonomy.&lt;/p&gt;

&lt;p&gt;That is why I think local APIs are interesting. They sit somewhere between media, maps, structured data, and product design.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you are building in this space
&lt;/h2&gt;

&lt;p&gt;We are opening access gradually, but if you are working on a project around Barcelona or Madrid and need local events, places, or news, that is what we are building toward.&lt;/p&gt;

&lt;p&gt;The public project is here, a bit more context lives there: &lt;a href="https://dondego.es/" rel="noopener noreferrer"&gt;DondeGo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would also be curious how other people here would design this kind of API.&lt;/p&gt;

&lt;p&gt;Would you prioritize geospatial search first, editorial freshness first, or category and tag structure first?&lt;/p&gt;

</description>
      <category>api</category>
      <category>barcelona</category>
      <category>madrid</category>
      <category>opendata</category>
    </item>
  </channel>
</rss>
