SubscriptionResource ==================== Introduction ------------ Subscription Resource. Hosts APIs to create, manage, share, and purchase subscriptions. Main capabilities: - Read active/user/admin subscription lists and counts - Create, update, and delete subscriptions - Share subscriptions with users and manage sharing entries - Retrieve available subscription types - Generate Stripe checkout URL and confirm Stripe checkout callback All endpoints are under base path /subscriptions. Authentication: - Most endpoints require x-session-token. - Stripe confirmation callback endpoint is called by Stripe and uses path parameter only. Common Models ------------- - SubscriptionViewModel: - subscriptionId, name, description, typeId, typeName, buyDate, startDate, endDate, durationDays, userId, organizationId, organizationName, buySuccess, readOnly - SubscriptionListViewModel: - subscriptionId, ownerUserId, name, typeId, typeName, startDate, endDate, organizationName, organizationId, reason, buySuccess, runningTime, readOnly - SubscriptionSharingViewModel: - subscriptionId, userId, ownerId, permissions - SubscriptionTypeViewModel: - typeId, name, description - StripePaymentDetail: - clientReferenceId, customerName, customerEmail, paymentIntentId, paymentStatus, paymentCurrency, paymentAmountInCents, invoiceId, productDescription, paymentDateInSeconds, date, invoicePdfUrl - PrimitiveResult: - IntValue, StringValue, DoubleValue, BoolValue - SuccessResponse: - message - ErrorResponse: - message APIs ---- GET /subscriptions/active ^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Returns active subscription for current user from valid subscriptions. - Success: 200 OK, body: SubscriptionListViewModel - Return codes: 200, 401, 404, 500 GET /subscriptions/byuser ^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Returns subscriptions associated with current user (owned/shared/organization-based via permission utility). - Query params: valid (optional boolean, default false) - Success: 200 OK, body: array of SubscriptionListViewModel - Return codes: 200, 401, 500 GET /subscriptions/count ^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Returns total subscriptions count. - Success: 200 OK, body: PrimitiveResult (IntValue) - Return codes: 200, 401, 403, 500 - Notes: admin-only endpoint. GET /subscriptions/byId ^^^^^^^^^^^^^^^^^^^^^^^ - Description: Returns full subscription details by id. - Query params: subscription (required) - Success: 200 OK, body: SubscriptionViewModel - Return codes: 200, 401, 400, 403, 500 POST /subscriptions/add ^^^^^^^^^^^^^^^^^^^^^^^ - Description: Creates a subscription and automatically creates a default project with same name. - Body: SubscriptionViewModel - Success: 200 OK, body: SuccessResponse (message contains subscription id) - Return codes: 200, 401, 500 - Notes: - For non-admin callers, target user is forced to current user. - Non-admin callers cannot force buySuccess=true. - Name collisions are resolved by cloning/renaming. PUT /subscriptions/update ^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Updates an existing subscription. - Body: SubscriptionViewModel - Success: 200 OK, body: SuccessResponse - Return codes: 200, 401, 400, 403, 500 - Notes: non-admin callers cannot change buySuccess state. DELETE /subscriptions/delete ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Deletes a subscription or removes caller sharing if caller is not owner/admin. - Query params: subscription (required) - Success: 200 OK, body: SuccessResponse - Return codes: 200, 401, 400, 403, 500 - Notes: - Owner/admin path removes sharings, deletes related projects, then deletes subscription. - Non-owner shared user path removes own sharing only. GET /subscriptions/types ^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Returns available subscription types. - Success: 200 OK, body: array of SubscriptionTypeViewModel - Return codes: 200, 500 POST /subscriptions/share/add ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Shares a subscription with another user. - Query params: subscription (required), userId (required), rights (optional; defaults to READ if invalid) - Success: 200 OK, body: SuccessResponse - Return codes: 200, 401, 400, 403, 500 - Notes: - Prevents sharing with self and owner. - Returns success with message Already Shared when permission already exists. GET /subscriptions/share/bysubscription ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Returns users currently sharing a subscription. - Query params: subscription (required) - Success: 200 OK, body: array of SubscriptionSharingViewModel - Return codes: 200, 401, 403, 500 DELETE /subscriptions/share/delete ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Removes one user sharing entry from a subscription. - Query params: subscription (required), userId (required) - Success: 200 OK, body: SuccessResponse - Return codes: 200, 401, 400, 403, 500 - Notes: - Cannot remove owner from its own subscription. - Allowed for owner/writer/admin, and in beneficiary-removal flow as implemented. GET /subscriptions/stripe/paymentUrl ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Generates Stripe checkout URL for a subscription type configured in server settings. - Query params: subscription (required), workspace (optional) - Success: 200 OK, body: SuccessResponse (message contains URL) - Return codes: 200, 401, 400, 403, 500 GET /subscriptions/stripe/confirmation/{CHECKOUT_SESSION_ID} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: Stripe callback endpoint to confirm payment and activate subscription. - Path params: CHECKOUT_SESSION_ID (required) - Success: 200 OK - Return codes: 200, 401, 500 - Notes: - Retrieves payment details from Stripe using checkout session id. - Sets buySuccess=true and buyDate when confirmation succeeds. - Optionally emits RabbitMQ message if workspace id is present in client reference id. GET /subscriptions/list ^^^^^^^^^^^^^^^^^^^^^^^ - Description: Admin dashboard listing endpoint with filters, sorting, and paging. - Query params: userfilter, idfilter, namefilter, statusfilter, offset, limit, sortby, order - Success: 200 OK, body: array of SubscriptionListViewModel - Return codes: 200, 401, 403, 500 - Notes: - Admin-only endpoint. - Defaults: offset=0, limit=10, sortby=name, order=asc.