Skip to main content

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.