Memberships & Plans
Requires an API key — see Authentication & Scopes.
Plans — the catalog
GET /membership-plans
List a space's membership plans, cursor-paginated. Scope: memberships:read.
curl https://api.tatiya.space/v1/membership-plans \
-H "Authorization: Bearer $TATIYA_API_KEY"
GET /membership-plans/{id}
Read one plan. Scope: memberships:read.
curl https://api.tatiya.space/v1/membership-plans/$PLAN_ID \
-H "Authorization: Bearer $TATIYA_API_KEY"
Memberships
GET /memberships
List memberships for your space, cursor-paginated. Scope: memberships:read.
curl https://api.tatiya.space/v1/memberships \
-H "Authorization: Bearer $TATIYA_API_KEY"
POST /memberships
Assign a plan to a member. Scope: memberships:write.
curl -X POST https://api.tatiya.space/v1/memberships \
-H "Authorization: Bearer $TATIYA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "member_id": "'"$MEMBER_ID"'", "plan_id": "'"$PLAN_ID"'" }'
PATCH /memberships/{id}
Update a membership's notes. Scope: memberships:write.
POST /memberships/{id}/cancel
Scope: memberships:write.
POST /memberships/{id}/pause
Scope: memberships:write.
POST /memberships/{id}/resume
Scope: memberships:write.
POST /memberships/{id}/payment
Record a payment against a membership. Scope: memberships:write.
curl -X POST https://api.tatiya.space/v1/memberships/$MEMBERSHIP_ID/payment \
-H "Authorization: Bearer $TATIYA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "method": "promptpay", "amount_minor": 150000 }'
method is a stricter enum here than on bookings. Memberships only accept promptpay,
bank_transfer, cash or other — the bookings payment endpoint accepts any short string.
Sending anything else on a membership payment gets an invalid_request, so it's worth validating
against this exact list before you send it, not after the first 400.
All six mutations respond with the canonical membership shape — the same one GET /memberships
returns a row of.