/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import * as z from "zod/v4-mini"; import { remap as remap$ } from "../../lib/primitives.js"; import { CustomerCancellationReason, CustomerCancellationReason$outboundSchema, } from "./customercancellationreason.js"; export type SubscriptionCancel = { /** * Customer reason for cancellation. * * @remarks * * Helpful to monitor reasons behind churn for future improvements. * * Only set this in case your own service is requesting the reason from the * customer. Or you know based on direct conversations, i.e support, with * the customer. * * * `too_expensive`: Too expensive for the customer. * * `missing_features`: Customer is missing certain features. * * `switched_service`: Customer switched to another service. * * `unused`: Customer is not using it enough. * * `customer_service`: Customer is not satisfied with the customer service. * * `low_quality`: Customer is unhappy with the quality. * * `too_complex`: Customer considers the service too complicated. * * `other`: Other reason(s). */ customerCancellationReason?: CustomerCancellationReason | null | undefined; /** * Customer feedback and why they decided to cancel. * * @remarks * * **IMPORTANT:** * Do not use this to store internal notes! It's intended to be input * from the customer and is therefore also available in their Polar * purchases library. * * Only set this in case your own service is requesting the reason from the * customer. Or you copy a message directly from a customer * conversation, i.e support. */ customerCancellationComment?: string | null | undefined; /** * Cancel an active subscription once the current period ends. * * @remarks * * Or uncancel a subscription currently set to be revoked at period end. */ cancelAtPeriodEnd: boolean; }; /** @internal */ export type SubscriptionCancel$Outbound = { customer_cancellation_reason?: string | null | undefined; customer_cancellation_comment?: string | null | undefined; cancel_at_period_end: boolean; }; /** @internal */ export const SubscriptionCancel$outboundSchema: z.ZodMiniType< SubscriptionCancel$Outbound, SubscriptionCancel > = z.pipe( z.object({ customerCancellationReason: z.optional( z.nullable(CustomerCancellationReason$outboundSchema), ), customerCancellationComment: z.optional(z.nullable(z.string())), cancelAtPeriodEnd: z.boolean(), }), z.transform((v) => { return remap$(v, { customerCancellationReason: "customer_cancellation_reason", customerCancellationComment: "customer_cancellation_comment", cancelAtPeriodEnd: "cancel_at_period_end", }); }), ); export function subscriptionCancelToJSON( subscriptionCancel: SubscriptionCancel, ): string { return JSON.stringify( SubscriptionCancel$outboundSchema.parse(subscriptionCancel), ); }