diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index 3e3f06ca..24711c1c 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -1,7 +1,7 @@ use crate::Client; use client_api_entity::billing_dto::{ SetSubscriptionRecurringInterval, SubscriptionCancelRequest, SubscriptionLinkRequest, - SubscriptionPlanDetail, WorkspaceUsageAndLimit, + SubscriptionPlanDetail, SubscriptionTrialRequest, WorkspaceUsageAndLimit, }; use reqwest::Method; use shared_entity::{ @@ -215,4 +215,24 @@ impl Client { .await? .into_data() } + + /// request a free trial for plan + pub async fn post_subscription_free_trial( + &self, + workspace_id: &str, + plan: SubscriptionPlan, + ) -> Result<(), AppResponseError> { + let url = format!( + "{}/billing/api/v1/subscription-trial/{}", + self.base_billing_url(), + workspace_id + ); + let resp = self + .cloud_client + .post(&url) + .query(&SubscriptionTrialRequest { plan }) + .send() + .await?; + AppResponse::<()>::from_response(resp).await?.into_error() + } } diff --git a/libs/shared-entity/src/dto/billing_dto.rs b/libs/shared-entity/src/dto/billing_dto.rs index 9cb5b909..8445618f 100644 --- a/libs/shared-entity/src/dto/billing_dto.rs +++ b/libs/shared-entity/src/dto/billing_dto.rs @@ -157,3 +157,8 @@ pub struct SubscriptionLinkRequest<'a> { pub success_url: &'a str, pub with_test_clock: Option, } + +#[derive(Serialize, Deserialize, Debug)] +pub struct SubscriptionTrialRequest { + pub plan: SubscriptionPlan, +}