Join the Student Life Events API
Events and tickets
Events and tickets
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/jointhestudentlife-com:jointhestudentlife-com-events-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Student Life Events API
version: 1.0.0
summary: Student cities, events, ticket prices and partner deals.
description: 'Open, keyless JSON API of The Student Life (jointhestudentlife.com): the cities where we run student communities, their guides, upcoming events with ticket prices and status, partner deals and pricing. Read endpoints need no authentication. Data refreshes whenever the website does. For AI agents, the same data is available as an MCP server at https://jointhestudentlife.com/mcp. Versioning and deprecation policy: the version is in the path (/api/v1); inside v1 we aim to only add things; a breaking change ships as /api/v2 and is announced on https://jointhestudentlife.com/developers#versioning before the old version changes, with Deprecation (RFC 9745) and, once a date is set, Sunset (RFC 8594) headers on affected endpoints. Rate limits are best effort per client, reported in RateLimit and X-RateLimit headers. Pagination is cursor based. Sandbox: POST /api/contact accepts dry_run to validate without sending.'
contact:
name: The Student Life
email: support@jointhestudentlife.com
url: https://jointhestudentlife.com/developers
x-deprecation-policy: https://jointhestudentlife.com/developers#versioning
servers:
- url: https://jointhestudentlife.com
security: []
tags:
- name: Events
description: Events and tickets
paths:
/api/v1/events:
get:
operationId: listEvents
summary: List events
description: Halloween parties, Welcome Festivals, semester kickoff parties and orientation weeks, with ticket prices per round, early access, status and the buy link.
tags:
- Events
parameters:
- name: city
in: query
description: City slug or name.
schema:
type: string
example: paris
- name: type
in: query
schema:
type: string
enum:
- all
- halloween
- welcome_festival
- semester_kickoff
- orientation_week
- name: upcoming
in: query
description: Only events that have not ended. Default true.
schema:
type: boolean
default: true
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 200
default: 200
description: Page size.
- $ref: '#/components/parameters/Cursor'
responses:
'200':
description: Events
content:
application/json:
schema:
$ref: '#/components/schemas/EventList'
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
API-Version:
$ref: '#/components/headers/API-Version'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
$ref: '#/components/responses/Error'
/api/v1/events/{id}:
get:
operationId: getEvent
summary: Get one event
tags:
- Events
parameters:
- name: id
in: path
required: true
description: Event id from listEvents.
schema:
type: string
example: berlin-hw26
responses:
'200':
description: Event
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
headers:
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
API-Version:
$ref: '#/components/headers/API-Version'
'404':
$ref: '#/components/responses/Error'
'429':
$ref: '#/components/responses/TooManyRequests'
default:
$ref: '#/components/responses/Error'
components:
headers:
RateLimit:
description: 'Current window: limit, remaining and seconds until reset (draft-ietf-httpapi-ratelimit-headers).'
schema:
type: string
example: limit=120, remaining=119, reset=60
X-RateLimit-Limit:
schema:
type: integer
X-RateLimit-Remaining:
schema:
type: integer
X-RateLimit-Reset:
description: Unix time when the window resets.
schema:
type: integer
RateLimit-Policy:
description: Quota policy.
schema:
type: string
example: 120;w=60
API-Version:
description: Major version that served the response.
schema:
type: string
example: '1'
Retry-After:
description: Seconds to wait after a 429.
schema:
type: integer
schemas:
Event:
type: object
properties:
id:
type: string
type:
type: string
enum:
- halloween
- welcome_festival
- semester_kickoff
- orientation_week
name:
type: string
city:
type: string
city_slug:
type:
- string
- 'null'
start:
type: string
end:
type:
- string
- 'null'
timezone:
type:
- string
- 'null'
venue:
type:
- object
- 'null'
properties:
name:
type: string
address:
type:
- string
- 'null'
age_min:
type:
- integer
- 'null'
url:
type: string
format: uri
status:
type: string
enum:
- upcoming
- past
tickets:
type: object
properties:
status:
type: string
enum:
- on_sale
- opens_soon
- coming_soon
- sales_closed
- see_page
- ended
description: 'opens_soon: published, but sales open at sales_open_at. sales_closed: the organiser closed ticket sales.'
options:
type: array
items:
$ref: '#/components/schemas/TicketOption'
early_access:
type:
- object
- 'null'
buy_url:
type: string
format: uri
note:
type: string
sales_open_at:
type:
- string
- 'null'
format: date-time
description: When ticket sales open, for status opens_soon.
waitlist_open:
type: boolean
whatsapp_group:
type:
- string
- 'null'
entry_rule:
type:
- string
- 'null'
EventList:
type: object
properties:
total:
type: integer
events:
type: array
items:
$ref: '#/components/schemas/Event'
next_cursor:
type:
- string
- 'null'
description: Pass as cursor to get the next page; null on the last page.
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
enum:
- bad_request
- not_found
- method_not_allowed
- internal_error
- rate_limited
- expired
- too_large
message:
type: string
status:
type: integer
docs:
type: string
format: uri
TicketOption:
type: object
properties:
name:
type: string
price:
type: number
currency:
type: string
responses:
TooManyRequests:
description: Rate limited
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
API-Version:
$ref: '#/components/headers/API-Version'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
Cursor:
name: cursor
in: query
description: 'Opaque cursor: the next_cursor of the previous page. Leave out for the first page.'
schema:
type: string
externalDocs:
description: For AI agents and developers
url: https://jointhestudentlife.com/developers