<<<<<<< HEAD
Cal.com Public API (Enterprise Only)
=======
Public API for Cal.com
This will be the new public enterprise-only API
It will be a REST API for now, we might want to look into adding a GraphQL endpoint way down the roadmap if it makes sense. For now we think REST should cover what developers need.
NextJS + TypeScript
It's a barebones NextJS + TypeScript project leveraging the nextJS API with a pages/api folder.
NextAuth
Using the new next-auth middleware getToken and getSession for our API auth and any other middleware check we might want to do like user role. enterprise status, api req limit, etc.
The idea is to leverage current Session accessToken. next-auth reads the Authorization Header and if it contains a valid JWT Bearer Token, it decodes it.
We'll also need the EmailProvider (to expose VerificationTokens generation) and prisma adapter (to connect with the database) We will extend it to also be valids PAT's with longer than web auth sessions expiryDates (maybe never expire).
No react
It doesn't have react or react-dom as a dependency, and will only be used by a redirect as a folder or subdomain on cal.com with maybe a v1 tag like:
v1.api.cal.comapi.cal.com/v1app.cal.com/api/v1/
Example
HTTP Request (Use Paw.app/postman/postwoman/hoppscotch)
POST /api/jwt HTTP/1.1
authorization: Bearer eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..ik9ibWdgN2Mq-WYH.7qsAwcOtOQyqwjIQ03EkEHy4kpy4GAndbqqQlhczc9xRgn_ycqXn4RbmwWA9LGm2LIXp_MQXMNm-i5vvc7piGZYyTPIGTieLspCYG4CKnZIawjcXmBEiwG9-PafNSUOGJB1O41l-9WbOEZNnIIAlfBTxdM3T13fUP4ese348tbn755Vi27Q_hOKulOfJ-Z-IQCd1OMsmTbuBo537IUkpj979.y288909Yt7mEYWJUAJRqdQ
or with cURL
curl -X "POST" "http://localhost:3002/api/jwt" \
-H 'authorization: Bearer eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..ik9ibWdgN2Mq-WYH.7qsAwcOtOQyqwjIQ03EkEHy4kpy4GAndbqqQlhczc9xRgn_ycqXn4RbmwWA9LGm2LIXp_MQXMNm-i5vvc7piGZYyTPIGTieLspCYG4CKnZIawjcXmBEiwG9-PafNSUOGJB1O41l-9WbOEZNnIIAlfBTxdM3T13fUP4ese348tbn755Vi27Q_hOKulOfJ-Z-IQCd1OMsmTbuBo537IUkpj979.y288909Yt7mEYWJUAJRqdQ'
Returns:
"name": null,
"email": "m@n.es",
"sub": "cl032mhik0006w4ylrtay2t3f",
"iat": 1645894473,
"exp": 1648486473,
"jti": "af1c04f2-09a8-45b5-a6f0-c35eea9efa9b",
"userRole": "admin"
}
API Endpoint Validation
The API uses zod library like our main web repo. It validates that either GET query parameters or POST body content's are valid and up to our spec. It gives appropiate errors when parsing result's with schemas.
Testing
/event-types GET /teams teams/join
GET / PATCH / PUT /users/:id
/users/new POST /event-types /bookings /availabilties /schedules
Users
GET /users : Get all users you're an owner / team manager of. Requires Auth. POST /users : Create a new user GET /users/{id} : Get the user information identified by "id" PUT /users/{id} : Update the user information identified by "id" DELETE /users/{id} : Delete user by "id"
Event Types
/event-types GET /event-types : Get all event-types POST /event-types : Create a new user GET /event-types/{id} : Get the user information identified by "id" PUT /event-types/{id} : Update the user information identified by "id" DELETE /event-types/{id} : Delete user by "id"
Bookings
/bookings
5a71055 (feat: Initial work on event-types, add jest for testing w node-http-mocks)