{"documentation":"https:\/\/github.com\/jbannister\/Pint-New","routes":[{"path":"\/","summary":"This list.","requiresSession":false,"method":"GET"},{"path":"\/health","summary":"Liveness check.","requiresSession":false,"method":"GET"},{"path":"\/privacy","summary":"The app's privacy policy, as a page.","requiresSession":false,"method":"GET"},{"path":"\/support","summary":"How to get help, as a page.","requiresSession":false,"method":"GET"},{"path":"\/api\/v1\/auth\/apple","summary":"Exchange an Apple identity token for a session.","requiresSession":false,"method":"POST"},{"path":"\/api\/v1\/auth\/google","summary":"Exchange a Google identity token for a session.","requiresSession":false,"method":"POST"},{"path":"\/api\/v1\/auth\/github","summary":"Exchange a GitHub authorization code for a session.","requiresSession":false,"method":"POST"},{"path":"\/api\/v1\/auth\/refresh","summary":"Exchange a refresh token for a new access token.","requiresSession":false,"method":"POST"},{"path":"\/api\/v1\/me","summary":"The signed-in person.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/me","summary":"Update name, and home or work address and coordinates.","requiresSession":true,"method":"PATCH"},{"path":"\/api\/v1\/me","summary":"Delete the account, its RSVPs, memberships and the photos it added.","requiresSession":true,"method":"DELETE"},{"path":"\/api\/v1\/me\/subscription","summary":"Pint Pro or not, and receipt scans used and allowed this month.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/me\/subscription","summary":"Record a purchase or restore: the transaction exactly as StoreKit signed it.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/apple\/notifications","summary":"App Store Server Notifications: renewals, expiries and refunds. Signed by Apple.","requiresSession":false,"method":"POST"},{"path":"\/api\/v1\/people","summary":"People who share a group with the caller, by name. No contact details.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/receipts\/read","summary":"Read a receipt photo into lines, service and totals. 402 when this month's scans are used up; 503 when not set up.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups","summary":"Groups the caller belongs to.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups","summary":"Create a group. The creator joins it.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups\/:groupID","summary":"One group. Members only.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID","summary":"Rename a group or change its usual time.","requiresSession":true,"method":"PATCH"},{"path":"\/api\/v1\/groups\/:groupID\/members","summary":"Add a member.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups\/:groupID\/contacts","summary":"Add someone from contacts by name and email. Holds a place for them until they sign in.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups\/:groupID\/members\/:personID","summary":"Remove a member. Anyone may remove themselves; only the owner may remove others.","requiresSession":true,"method":"DELETE"},{"path":"\/api\/v1\/groups\/:groupID\/meetups","summary":"A group's meetups, newest first. Optional from\/to.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups","summary":"Schedule a meetup. Creates a chat and a pending RSVP per member.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID","summary":"Meetup, attendees, venue, chat summary and map markers in one response.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID","summary":"Change or cancel a meetup.","requiresSession":true,"method":"PATCH"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/rsvp","summary":"Set the caller's own answer. Idempotent.","requiresSession":true,"method":"PUT"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/chat","summary":"Chat summary: message count and last message time. Cheap to poll.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/chat\/messages","summary":"Messages, oldest first. Optional after= cursor and limit=.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/chat\/messages","summary":"Post a message. The author is the caller.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/photos","summary":"A meetup's photos, oldest first. No image bytes. 503 when photos are not set up.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/photos","summary":"Add a photo: a JPEG and its thumbnail. The author is the caller.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/photos\/:photoID","summary":"The full image, as image\/jpeg.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/photos\/:photoID\/thumbnail","summary":"The thumbnail, as image\/jpeg.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/photos\/:photoID","summary":"Delete a photo. Whoever added it, or the group's owner.","requiresSession":true,"method":"DELETE"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/booking","summary":"The table booked for a meetup, if one has been.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/booking","summary":"Book the table. Replaces an existing booking; the day must be the meetup's.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/groups\/:groupID\/meetups\/:meetupID\/booking","summary":"Confirm or cancel the booking.","requiresSession":true,"method":"PATCH"},{"path":"\/api\/v1\/venues","summary":"The venue directory, alphabetical.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/venues","summary":"Add a venue.","requiresSession":true,"method":"POST"},{"path":"\/api\/v1\/venues\/:venueID","summary":"One venue.","requiresSession":true,"method":"GET"},{"path":"\/api\/v1\/venues\/:venueID","summary":"Edit a venue. Its creator only.","requiresSession":true,"method":"PATCH"}],"version":"v1","service":"Pint"}