API Contracts
Generated: 2026-04-06 | Scan level: exhaustive
Base path: /events/api/v1/
Auth: DjangoModelPermissionsOrAnonReadOnly — unauthenticated users get read-only access.
Pagination: LimitOffsetPagination, default page size 10.
Interactive docs: /swagger/ (admin-only) and /redoc/.
GET /events/api/v1/events/
Returns all published events (past and future), paginated.
Query parameters
| Parameter | Type | Notes |
|---|---|---|
place__city__slug |
string | Filter by city slug (e.g. bogota) |
ordering |
string | Field to order by. Allowed: event_date, -event_date |
limit |
int | Page size |
offset |
int | Pagination offset |
Response
{
"count": 142,
"next": "/events/api/v1/events/?limit=10&offset=10",
"previous": null,
"results": [
{
"title": "Presentación del libro X",
"slug": "presentacion-del-libro-x",
"url": "/events/presentacion-del-libro-x/",
"event_date": "2026-04-10T18:00:00Z",
"formatted_hour": "13:00",
"formatted_day": "10 Apr",
"place": {
"name": "Biblioteca Luis Ángel Arango",
"slug": "biblioteca-luis-angel-arango"
},
"image_url": "/static/images/default_event_image.jpg",
"description": "<p>Full HTML description...</p>",
"truncated_description": "Truncated to 50 words...",
"is_recurrent": false
}
]
}
Notes
formatted_hourandformatted_dayare localized toAmerica/Bogota.image_urlfalls back to a static default image if the event has no uploaded image. Source-specific fallbacks exist for events with knownsource_idprefixes (FILBO2025_,FILBO2026_,FLCM2025_,PEREIRAFIL_25).is_recurrentalways returnsfalse(reserved for future use).descriptionis full HTML;truncated_descriptionis HTML truncated to 50 words.
GET /events/api/v1/events/future/
Returns only future published events that are not hidden (is_hidden=False), paginated.
Query parameters
Same as /events/api/v1/events/. Filtering and ordering are inherited.
Response
Same schema as /events/api/v1/events/.
Notes
- This is the endpoint consumed by the Vue.js
EventContainercomponent on the homepage to render the interactive event list. - Excludes events with
is_hidden=True(bulk-imported events pending review). - Always selects related
placeandplace.cityto avoid N+1 queries.
Internal / RSS Feeds
These are not REST API endpoints but are used programmatically.
| URL | Format | Description |
|---|---|---|
/rss/ |
RSS 2.0 | All published future events feed (for social networks) |
/atom/ |
Atom | Same content, Atom format |
/sitemap.xml |
XML | Sitemap covering events, places, posts, speakers, specials, history |
Autocomplete Endpoints (DAL / Select2)
These endpoints power the Select2 widgets in event and place forms. They require authentication.
| URL | Name | Returns |
|---|---|---|
/events/organizers-autocomplete/ |
events:organizer_autocomplete |
Organizer name/id matches |
/events/speaker-autocomplete/ |
events:speaker_autocomplete |
Speaker name/id matches |
/events/organizers-suggestions/ |
events:organizer_suggestions |
Suggestions for new events |
/places/place-autocomplete/ |
places:place_autocomplete |
Place name/id matches |
Authentication Endpoints
Managed by django-allauth at /accounts/:
| URL | Action |
|---|---|
/accounts/login/ |
Email + password login |
/accounts/signup/ |
Registration (email + password) |
/accounts/logout/ |
Logout |
/accounts/email/ |
Email management |
/accounts/password/change/ |
Password change |
/accounts/confirm-email/<key>/ |
Email confirmation |
Admin API (Django Admin)
Available at /admin/ for staff/superuser users. Registered models include all core entities.
Serializer Reference
EventSerializer
Fields: title, slug, url, event_date, formatted_hour, formatted_day, place (nested PlaceSerializer), image_url, description, truncated_description, is_recurrent
PlaceSerializer (nested)
Fields: name, slug