API Reference · v1

Build on Asana

A clean, REST-ful API for marketplace listings, bookings, and payouts. All endpoints return JSON and use bearer-token authentication.

Base URL: https://api.asana.appAuth: Authorization: Bearer …Rate limit: 600/min

Authentication

POST/v1/auth/session

Create a session for a role.

Request

{ "role": "student" }

Response

{ "token": "sess_•••", "user": { "id": "u_…", "role": "student" } }
DELETE/v1/auth/session

Sign out.

Response

{ "ok": true }

Classes

GET/v1/classes

List published classes with filters.

Response

{
  "data": [{
    "id": "c_1", "title": "Sunrise Vinyasa Flow",
    "style": "Vinyasa", "price": 22, "rating": 4.9
  }],
  "pagination": { "page": 1, "total": 6 }
}
GET/v1/classes/:id

Fetch a single class.

Response

{ "id": "c_1", "teacher": { "id":"u_t", "name":"Elena Rivers" }, "schedule": "Mon, Wed · 7:30 AM" }
POST/v1/classes

Create a class (teacher).

Request

{ "title": "...", "style": "Yin", "price": 28, "capacity": 20 }

Response

{ "id": "c_•••", "status": "published" }
PATCH/v1/classes/:id

Update a class (teacher/admin).

Request

{ "price": 32, "status": "draft" }

Response

{ "id": "c_1", "updated": true }
DELETE/v1/classes/:id

Remove a class.

Response

{ "ok": true }

Bookings

POST/v1/bookings

Book a class.

Request

{ "classId": "c_1", "date": "2026-05-04T07:30:00Z" }

Response

{ "id":"b_•••", "status":"confirmed", "amount": 22 }
GET/v1/bookings

List my bookings.

Response

{ "data": [{ "id":"b_1", "status":"confirmed", "classId":"c_1" }] }
PATCH/v1/bookings/:id

Cancel a booking.

Request

{ "status": "cancelled" }

Response

{ "ok": true }

Payments

POST/v1/payments/intents

Create a Stripe payment intent.

Request

{ "bookingId": "b_•••" }

Response

{ "clientSecret": "pi_•••_secret_•••" }
POST/v1/payouts

Trigger teacher payout.

Request

{ "teacherId": "u_t", "amount": 480 }

Response

{ "id":"po_•••", "status":"pending" }

Admin

GET/v1/admin/users

List all users.

Response

{ "data": [...] }
PATCH/v1/admin/users/:id

Change role.

Request

{ "role": "teacher" }

Response

{ "ok": true }