{"openapi":"3.1.0","info":{"title":"RightRock API","version":"1.0.0","description":"Showtimes, prices, seats and bookings for one cinema. Authenticate with a secret key: Authorization: Bearer rr_..."},"servers":[{"url":"https://app.rightrock.co"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"security":[{"bearer":[]}],"paths":{"/api/v1/cinema":{"get":{"summary":"Your cinema","description":"Name, currency, time zone, whether online sales are on, and open locations.","parameters":[],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/films":{"get":{"summary":"Films","description":"Films showing now or coming soon.","parameters":[{"name":"status","in":"query","required":false,"description":"now_showing or coming_soon","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/screenings":{"get":{"summary":"Showtimes","description":"On-sale screenings between two dates in the cinema's time zone, with seats left. Up to 31 days; defaults to the next 7.","parameters":[{"name":"from","in":"query","required":false,"description":"First date, like 2026-11-07","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"Last date, inclusive","schema":{"type":"string"}},{"name":"film_id","in":"query","required":false,"description":"Only this film","schema":{"type":"string"}},{"name":"location_id","in":"query","required":false,"description":"Only this location","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/screenings/{id}":{"get":{"summary":"One showtime, with prices and seats","description":"Ticket types and prices (by seat category), and for assigned seating the seat plan with each seat's status. Starts_at is when doors open.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/orders":{"post":{"summary":"Book tickets","description":"Holds the seats for 10 minutes and starts a payment. Send the customer to checkout_url. After paying they come back to return_url, the order becomes paid and the e-tickets are emailed to them. Seats someone else took return 409 with the seat ids.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"example":{"screening_id":"scn_x","tickets":[{"ticket_type_id":"tt_x","seat_id":"F7"},{"ticket_type_id":"tt_x","seat_id":"F8"}],"customer":{"name":"Ada Okafor","email":"ada@example.com","phone":"+2348031234567"},"promo_code":"STUDENT10","return_url":"https://your-site.com/booking/done"}}}},"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/orders/{id}":{"get":{"summary":"Check an order","description":"Status is pending, paid, expired, refund_due, partially_refunded or refunded. Ticket codes appear once paid.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid key"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}}}}