From 9c2b90fb8f41d36fc25acf6e0ad79762cc66f8a5 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Tue, 3 Jun 2025 11:29:08 -0400 Subject: [PATCH] collab: Return subscription period from `GET /billing/subscriptions` (#31987) This PR updates the `GET /billing/subscriptions` endpoint to return the subscription period on them. Release Notes: - N/A --- crates/collab/src/api/billing.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/crates/collab/src/api/billing.rs b/crates/collab/src/api/billing.rs index 43a213f3ff..4620cdeaa9 100644 --- a/crates/collab/src/api/billing.rs +++ b/crates/collab/src/api/billing.rs @@ -219,12 +219,19 @@ struct BillingSubscriptionJson { id: BillingSubscriptionId, name: String, status: StripeSubscriptionStatus, + period: Option, trial_end_at: Option, cancel_at: Option, /// Whether this subscription can be canceled. is_cancelable: bool, } +#[derive(Debug, Serialize)] +struct BillingSubscriptionPeriodJson { + start_at: String, + end_at: String, +} + #[derive(Debug, Serialize)] struct ListBillingSubscriptionsResponse { subscriptions: Vec, @@ -254,6 +261,15 @@ async fn list_billing_subscriptions( None => "Zed LLM Usage".to_string(), }, status: subscription.stripe_subscription_status, + period: maybe!({ + let start_at = subscription.current_period_start_at()?; + let end_at = subscription.current_period_end_at()?; + + Some(BillingSubscriptionPeriodJson { + start_at: start_at.to_rfc3339_opts(SecondsFormat::Millis, true), + end_at: end_at.to_rfc3339_opts(SecondsFormat::Millis, true), + }) + }), trial_end_at: if subscription.kind == Some(SubscriptionKind::ZedProTrial) { maybe!({ let end_at = subscription.stripe_current_period_end?;