import {z} from 'zod' export type CreateApiInvoicesIdRecalculateV2Args = {id: string, finalize?: boolean | undefined}; export type CreateApiInvoicesIdRecalculateV2Options = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const typesCouponType = z.enum(["fixed", "percentage"]); export const typesStatus = z.enum(["published", "deleted", "archived"]); export const couponApplicationResponse = z.object({applied_at: z.string().optional(), coupon_association_id: z.string().optional(), coupon_id: z.string().optional(), coupon_snapshot: z.record(z.string(), z.unknown()).optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), discount_percentage: z.string().optional(), discount_type: typesCouponType.optional(), discounted_amount: z.string().optional(), environment_id: z.string().optional(), final_price: z.string().optional(), id: z.string().optional(), invoice_id: z.string().optional(), invoice_line_item_id: z.string().optional(), metadata: z.record(z.string(), z.string()).optional(), original_price: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesIntegrationEntityType = z.enum(["customer", "plan", "invoice", "subscription", "payment", "credit_note", "addon", "item", "item_price", "price"]); export const entityIntegrationMappingResponse = z.object({created_at: z.string().optional(), created_by: z.string().optional(), entity_id: z.string().optional(), entity_type: typesIntegrationEntityType.optional(), environment_id: z.string().optional(), id: z.string().optional(), metadata: z.record(z.string(), z.unknown()).optional(), provider_entity_id: z.string().optional(), provider_type: z.string().optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const customerResponse = z.object({address_city: z.string().optional(), address_country: z.string().optional(), address_line1: z.string().optional(), address_line2: z.string().optional(), address_postal_code: z.string().optional(), address_state: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), email: z.string().optional(), environment_id: z.string().optional(), external_id: z.string().optional(), id: z.string().optional(), integrations: z.array(entityIntegrationMappingResponse).optional(), metadata: z.record(z.string(), z.string()).optional(), name: z.string().optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), timezone: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesInvoiceStatus = z.enum(["DRAFT", "FINALIZED", "VOIDED", "SKIPPED"]); export const typesInvoiceType = z.enum(["SUBSCRIPTION", "ONE_OFF", "CREDIT"]); export const typesBillingPeriod = z.enum(["MONTHLY", "ANNUAL", "WEEKLY", "DAILY", "QUARTERLY", "HALF_YEARLY", "ONETIME"]); export const typesCommitmentType = z.enum(["amount", "quantity"]); export const typesCommitmentInfo = z.object({amount: z.string().optional(), computed_commitment_utilized_amount: z.string().optional(), computed_overage_amount: z.string().optional(), computed_true_up_amount: z.string().optional(), duration: typesBillingPeriod.optional(), is_windowed: z.boolean().optional(), overage_factor: z.string().optional(), quantity: z.string().optional(), true_up_enabled: z.boolean().optional(), type: typesCommitmentType.optional()}); export const typesMetadata = z.record(z.string(), z.string()); export const sourceUsageItem = z.object({cost: z.string().optional(), event_count: z.number().int().optional(), percentage: z.string().optional(), source: z.string().optional(), usage: z.string().optional()}); export const usageBreakdownItem = z.object({cost: z.string().optional(), event_count: z.number().int().optional(), grouped_by: z.record(z.string(), z.string()).optional(), percentage: z.string().optional(), usage: z.string().optional()}); export const invoiceLineItemResponse = z.object({adjusted_entitlement_quantity: z.string().optional(), amount: z.string().optional(), commitment_info: typesCommitmentInfo.optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), customer_id: z.string().optional(), display_name: z.string().optional(), entity_id: z.string().optional(), entity_type: z.string().optional(), environment_id: z.string().optional(), id: z.string().optional(), invoice_id: z.string().optional(), invoice_level_discount: z.string().optional(), line_item_discount: z.string().optional(), metadata: typesMetadata.optional(), meter_display_name: z.string().optional(), meter_id: z.string().optional(), period_end: z.string().optional(), period_start: z.string().optional(), plan_display_name: z.string().optional(), prepaid_credits_applied: z.string().optional(), price_id: z.string().optional(), price_type: z.string().optional(), price_unit: z.string().optional(), price_unit_amount: z.string().optional(), price_unit_id: z.string().optional(), quantity: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), subscription_line_item_id: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional(), usage_analytics: z.array(sourceUsageItem).optional(), usage_breakdown: z.array(usageBreakdownItem).optional()}); export const typesPaymentStatus = z.enum(["INITIATED", "PENDING", "PROCESSING", "SUCCEEDED", "OVERPAID", "FAILED", "REFUNDED", "PARTIALLY_REFUNDED", "VOIDED"]); export const typesBillingCadence = z.literal("RECURRING"); export const typesBillingCycle = z.enum(["anniversary", "calendar"]); export const typesCouponCadence = z.enum(["once", "repeated", "forever"]); export const couponResponse = z.object({amount_off: z.string().optional(), cadence: typesCouponCadence.optional(), coupon_code: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), duration_in_periods: z.number().int().optional(), environment_id: z.string().optional(), id: z.string().optional(), max_redemptions: z.number().int().optional(), metadata: z.record(z.string(), z.string()).optional(), name: z.string().optional(), percentage_off: z.string().optional(), redeem_after: z.string().optional(), redeem_before: z.string().optional(), rules: z.record(z.string(), z.unknown()).optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), total_redemptions: z.number().int().optional(), type: typesCouponType.optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesBucket = z.object({hour: z.number().int().gte(0).lte(24).optional(), minute: z.number().int().gte(0).lte(59).optional()}); export const typesTimeOfDayBucket = z.object({commitment_type: typesCommitmentType.optional(), commitment_value: z.string().optional(), end: typesBucket.optional(), id: z.string().optional(), overage_factor: z.number().optional(), price_id: z.string().optional(), start: typesBucket.optional(), true_up_enabled: z.boolean().optional()}); export const typesSubscriptionLineItemEntityType = z.enum(["plan", "addon", "subscription"]); export const typesInvoiceCadence = z.enum(["ARREAR", "ADVANCE"]); export const typesEntitlementEntityType = z.enum(["PLAN", "SUBSCRIPTION", "ADDON"]); export const typesAlertCondition = z.enum(["above", "below"]); export const typesAlertThreshold = z.object({condition: typesAlertCondition.optional(), threshold: z.number().optional()}); export const typesAlertSettings = z.object({alert_enabled: z.boolean().optional(), critical: typesAlertThreshold.optional(), info: typesAlertThreshold.optional(), warning: typesAlertThreshold.optional()}); export const groupResponse = z.object({created_at: z.string().optional(), entity_ids: z.array(z.string()).optional(), entity_type: z.string().optional(), id: z.string().optional(), lookup_key: z.string().optional(), metadata: z.record(z.string(), z.string()).optional(), name: z.string().optional(), status: z.string().optional(), updated_at: z.string().optional()}); export const typesWindowSize = z.enum(["MINUTE", "15MIN", "30MIN", "HOUR", "3HOUR", "6HOUR", "12HOUR", "DAY", "WEEK", "MONTH"]); export const typesAggregationType = z.enum(["COUNT", "SUM", "AVG", "COUNT_UNIQUE", "LATEST", "SUM_WITH_MULTIPLIER", "MAX", "WEIGHTED_SUM"]); export const meterAggregation = z.object({bucket_size: typesWindowSize.optional(), expression: z.string().optional(), field: z.string().optional(), group_by: z.string().optional(), multiplier: z.string().optional(), type: typesAggregationType.optional()}); export const meterFilter = z.object({key: z.string().optional(), values: z.array(z.string()).optional()}); export const typesResetUsage = z.enum(["BILLING_PERIOD", "NEVER"]); export const meterResponse = z.object({aggregation: meterAggregation.optional(), created_at: z.string().optional(), event_name: z.string().optional(), filters: z.array(meterFilter).optional(), id: z.string().optional(), name: z.string().optional(), reset_usage: typesResetUsage.optional(), status: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional()}); export const typesReportingUnit = z.object({conversion_rate: z.number().optional(), unit_plural: z.string().optional(), unit_singular: z.string().optional()}); export const typesFeatureType = z.enum(["metered", "boolean", "static", "config"]); export const featureResponse = z.object({alert_settings: typesAlertSettings.optional(), created_at: z.string().optional(), created_by: z.string().optional(), description: z.string().optional(), environment_id: z.string().optional(), group: groupResponse.optional(), group_id: z.string().optional(), id: z.string().optional(), lookup_key: z.string().optional(), metadata: typesMetadata.optional(), meter: meterResponse.optional(), meter_id: z.string().optional(), name: z.string().optional(), reporting_unit: typesReportingUnit.optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), type: typesFeatureType.optional(), unit_plural: z.string().optional(), unit_singular: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesCreditGrantCadence = z.enum(["ONETIME", "RECURRING"]); export const typesCreditGrantExpiryDurationUnit = z.enum(["DAY", "WEEK", "MONTH", "YEAR"]); export const typesCreditGrantExpiryType = z.enum(["NEVER", "DURATION", "BILLING_CYCLE"]); export const typesCreditGrantPeriod = z.enum(["DAILY", "WEEKLY", "MONTHLY", "ANNUAL", "QUARTERLY", "HALF_YEARLY"]); export const typesCreditGrantScope = z.enum(["PLAN", "SUBSCRIPTION"]); export const creditGrantResponse = z.object({cadence: typesCreditGrantCadence.optional(), conversion_rate: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), credit_grant_anchor: z.string().optional(), credits: z.string().optional(), end_date: z.string().optional(), environment_id: z.string().optional(), expiration_duration: z.number().int().optional(), expiration_duration_unit: typesCreditGrantExpiryDurationUnit.optional(), expiration_type: typesCreditGrantExpiryType.optional(), id: z.string().optional(), metadata: typesMetadata.optional(), name: z.string().optional(), period: typesCreditGrantPeriod.optional(), period_count: z.number().int().optional(), plan_id: z.string().optional(), priority: z.number().int().optional(), scope: typesCreditGrantScope.optional(), start_date: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), tenant_id: z.string().optional(), topup_conversion_rate: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const planResponse = z.object({created_at: z.string().optional(), created_by: z.string().optional(), credit_grants: z.array(creditGrantResponse).optional(), description: z.string().optional(), display_order: z.number().int().optional(), entitlements: z.array(z.lazy(() => entitlementResponse)).optional(), environment_id: z.string().optional(), id: z.string().optional(), lookup_key: z.string().optional(), metadata: typesMetadata.optional(), name: z.string().optional(), prices: z.array(z.lazy(() => priceResponse)).optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesEntitlementUsageResetPeriod = z.enum(["MONTHLY", "ANNUAL", "WEEKLY", "DAILY", "QUARTERLY", "HALF_YEARLY", "NEVER"]); export const entitlementResponse: z.ZodType = z.object({addon: z.lazy(() => addonResponse.optional()), config_value: z.record(z.string(), z.unknown()).optional(), created_at: z.string().optional(), created_by: z.string().optional(), display_order: z.number().int().optional(), end_date: z.string().optional(), entity_id: z.string().optional(), entity_type: typesEntitlementEntityType.optional(), environment_id: z.string().optional(), feature: featureResponse.optional(), feature_id: z.string().optional(), feature_type: typesFeatureType.optional(), id: z.string().optional(), is_enabled: z.boolean().optional(), is_soft_limit: z.boolean().optional(), parent_entitlement_id: z.string().optional(), plan: planResponse.optional(), plan_id: z.string().optional(), start_date: z.string().optional(), static_value: z.string().optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional(), usage_limit: z.number().int().optional(), usage_reset_period: typesEntitlementUsageResetPeriod.optional()}); export const addonResponse: z.ZodType = z.object({created_at: z.string().optional(), created_by: z.string().optional(), description: z.string().optional(), entitlements: z.array(entitlementResponse).optional(), environment_id: z.string().optional(), id: z.string().optional(), lookup_key: z.string().optional(), metadata: z.record(z.string(), z.unknown()).optional(), name: z.string().optional(), prices: z.array(z.lazy(() => priceResponse)).optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesBillingModel = z.enum(["FLAT_FEE", "PACKAGE", "TIERED"]); export const typesPriceEntityType = z.enum(["PLAN", "SUBSCRIPTION", "ADDON", "PRICE", "COSTSHEET"]); export const priceJSONBMetadata = z.record(z.string(), z.string()); export const pricePriceTier = z.object({flat_amount: z.string().optional(), unit_amount: z.string().optional(), up_to: z.number().int().optional()}); export const typesPriceUnitType = z.enum(["FIAT", "CUSTOM"]); export const priceUnitResponse = z.object({base_currency: z.string().optional(), code: z.string().optional(), conversion_rate: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), environment_id: z.string().optional(), id: z.string().optional(), metadata: typesMetadata.optional(), name: z.string().optional(), status: typesStatus.optional(), symbol: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesBillingTier = z.enum(["VOLUME", "SLAB"]); export const typesRoundType = z.enum(["up", "down"]); export const priceJSONBTransformQuantity = z.object({divide_by: z.number().int().optional(), round: typesRoundType.optional()}); export const typesPriceType = z.enum(["USAGE", "FIXED"]); export const priceResponse: z.ZodType = z.object({addon: addonResponse.optional(), amount: z.string().optional(), billing_cadence: typesBillingCadence.optional(), billing_model: typesBillingModel.optional(), billing_period: typesBillingPeriod.optional(), billing_period_count: z.number().int().optional(), conversion_rate: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), description: z.string().optional(), display_amount: z.string().optional(), display_name: z.string().optional(), display_price_unit_amount: z.string().optional(), end_date: z.string().optional(), entity_id: z.string().optional(), entity_type: typesPriceEntityType.optional(), environment_id: z.string().optional(), group: groupResponse.optional(), group_id: z.string().optional(), id: z.string().optional(), invoice_cadence: typesInvoiceCadence.optional(), lookup_key: z.string().optional(), metadata: priceJSONBMetadata.optional(), meter: meterResponse.optional(), meter_id: z.string().optional(), min_quantity: z.string().nullable().optional(), parent_price_id: z.string().optional(), plan: planResponse.optional(), price_unit: z.string().optional(), price_unit_amount: z.string().optional(), price_unit_id: z.string().optional(), price_unit_tiers: z.array(pricePriceTier).optional(), price_unit_type: typesPriceUnitType.optional(), pricing_unit: priceUnitResponse.optional(), sequence: z.number().int().optional(), start_date: z.string().optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), tier_mode: typesBillingTier.optional(), tiers: z.array(pricePriceTier).optional(), transform_quantity: priceJSONBTransformQuantity.optional(), trial_period_days: z.number().int().optional(), type: typesPriceType.optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const subscriptionLineItemResponse = z.object({addon_association_id: z.string().optional(), billing_period: typesBillingPeriod.optional(), billing_period_count: z.number().int().optional(), commitment_amount: z.string().optional(), commitment_duration: typesBillingPeriod.optional(), commitment_overage_factor: z.string().optional(), commitment_quantity: z.string().optional(), commitment_time_buckets: z.array(typesTimeOfDayBucket).optional(), commitment_true_up_enabled: z.boolean().optional(), commitment_type: typesCommitmentType.optional(), commitment_windowed: z.boolean().optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), customer_id: z.string().optional(), display_name: z.string().optional(), end_date: z.string().optional(), entity_id: z.string().optional(), entity_type: typesSubscriptionLineItemEntityType.optional(), environment_id: z.string().optional(), id: z.string().optional(), invoice_cadence: typesInvoiceCadence.optional(), metadata: z.record(z.string(), z.string()).optional(), meter_display_name: z.string().optional(), meter_id: z.string().optional(), plan_display_name: z.string().optional(), price: priceResponse.optional(), price_id: z.string().optional(), price_type: typesPriceType.optional(), price_unit: z.string().optional(), price_unit_id: z.string().optional(), quantity: z.string().optional(), start_date: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), subscription_phase_id: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const couponAssociationResponse = z.object({coupon: couponResponse.optional(), coupon_id: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), end_date: z.string().optional(), environment_id: z.string().optional(), id: z.string().optional(), metadata: z.record(z.string(), z.string()).optional(), start_date: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), subscription_line_item: subscriptionLineItemResponse.optional(), subscription_line_item_id: z.string().optional(), subscription_phase_id: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const pricePrice = z.object({amount: z.string().optional(), billing_cadence: typesBillingCadence.optional(), billing_model: typesBillingModel.optional(), billing_period: typesBillingPeriod.optional(), billing_period_count: z.number().int().optional(), conversion_rate: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), description: z.string().optional(), display_amount: z.string().optional(), display_name: z.string().optional(), display_price_unit_amount: z.string().optional(), end_date: z.string().optional(), entity_id: z.string().optional(), entity_type: typesPriceEntityType.optional(), environment_id: z.string().optional(), group_id: z.string().optional(), id: z.string().optional(), invoice_cadence: typesInvoiceCadence.optional(), lookup_key: z.string().optional(), metadata: priceJSONBMetadata.optional(), meter_id: z.string().optional(), min_quantity: z.string().nullable().optional(), parent_price_id: z.string().optional(), price_unit: z.string().optional(), price_unit_amount: z.string().optional(), price_unit_id: z.string().optional(), price_unit_tiers: z.array(pricePriceTier).optional(), price_unit_type: typesPriceUnitType.optional(), sequence: z.number().int().optional(), start_date: z.string().optional(), status: typesStatus.optional(), tenant_id: z.string().optional(), tier_mode: typesBillingTier.optional(), tiers: z.array(pricePriceTier).optional(), transform_quantity: priceJSONBTransformQuantity.optional(), trial_period_days: z.number().int().optional(), type: typesPriceType.optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const subscriptionSubscriptionLineItem = z.object({addon_association_id: z.string().optional(), billing_period: typesBillingPeriod.optional(), billing_period_count: z.number().int().optional(), commitment_amount: z.string().optional(), commitment_duration: typesBillingPeriod.optional(), commitment_overage_factor: z.string().optional(), commitment_quantity: z.string().optional(), commitment_time_buckets: z.array(typesTimeOfDayBucket).optional(), commitment_true_up_enabled: z.boolean().optional(), commitment_type: typesCommitmentType.optional(), commitment_windowed: z.boolean().optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), customer_id: z.string().optional(), display_name: z.string().optional(), end_date: z.string().optional(), entity_id: z.string().optional(), entity_type: typesSubscriptionLineItemEntityType.optional(), environment_id: z.string().optional(), id: z.string().optional(), invoice_cadence: typesInvoiceCadence.optional(), metadata: z.record(z.string(), z.string()).optional(), meter_display_name: z.string().optional(), meter_id: z.string().optional(), plan_display_name: z.string().optional(), price: pricePrice.optional(), price_id: z.string().optional(), price_type: typesPriceType.optional(), price_unit: z.string().optional(), price_unit_id: z.string().optional(), quantity: z.string().optional(), start_date: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), subscription_phase_id: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesPauseStatus = z.enum(["none", "active", "scheduled", "completed", "cancelled"]); export const typesPauseMode = z.enum(["immediate", "scheduled", "period_end"]); export const typesResumeMode = z.enum(["immediate", "scheduled", "auto"]); export const subscriptionSubscriptionPause = z.object({created_at: z.string().optional(), created_by: z.string().optional(), environment_id: z.string().optional(), id: z.string().optional(), metadata: typesMetadata.optional(), original_period_end: z.string().optional(), original_period_start: z.string().optional(), pause_end: z.string().optional(), pause_mode: typesPauseMode.optional(), pause_start: z.string().optional(), pause_status: typesPauseStatus.optional(), reason: z.string().optional(), resume_mode: typesResumeMode.optional(), resumed_at: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesPaymentTerms = z.enum(["15 NET", "30 NET", "45 NET", "60 NET", "75 NET", "90 NET"]); export const subscriptionPhaseResponse = z.object({created_at: z.string().optional(), created_by: z.string().optional(), end_date: z.string().optional(), environment_id: z.string().optional(), id: z.string().optional(), metadata: typesMetadata.optional(), start_date: z.string().optional(), status: typesStatus.optional(), subscription_id: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const typesProrationBehavior = z.enum(["create_prorations", "none"]); export const typesSubscriptionStatus = z.enum(["active", "paused", "cancelled", "incomplete", "trialing", "draft"]); export const typesSubscriptionType = z.enum(["standalone", "delegated_invoicing", "parent", "inherited", "grouped_invoicing"]); export const subscriptionResponse = z.object({active_pause_id: z.string().optional(), auto_invoice_threshold: z.string().optional(), billing_anchor: z.string().optional(), billing_cadence: typesBillingCadence.optional(), billing_cycle: typesBillingCycle.optional(), billing_period: typesBillingPeriod.optional(), billing_period_count: z.number().int().optional(), cancel_at: z.string().optional(), cancel_at_period_end: z.boolean().optional(), cancelled_at: z.string().optional(), collection_method: z.string().optional(), commitment_amount: z.string().optional(), commitment_duration: typesBillingPeriod.optional(), coupon_associations: z.array(couponAssociationResponse).optional(), created_at: z.string().optional(), created_by: z.string().optional(), credit_grants: z.array(creditGrantResponse).optional(), currency: z.string().optional(), current_period_end: z.string().optional(), current_period_start: z.string().optional(), customer: customerResponse.optional(), customer_id: z.string().optional(), enable_true_up: z.boolean().optional(), end_date: z.string().optional(), environment_id: z.string().optional(), gateway_payment_method_id: z.string().optional(), id: z.string().optional(), invoicing_customer_id: z.string().optional(), latest_invoice: z.lazy(() => invoiceResponse.optional()), line_items: z.array(subscriptionSubscriptionLineItem).optional(), lookup_key: z.string().optional(), metadata: typesMetadata.optional(), overage_factor: z.string().optional(), parent_subscription_id: z.string().optional(), pause_status: typesPauseStatus.optional(), pauses: z.array(subscriptionSubscriptionPause).optional(), payment_behavior: z.string().optional(), payment_terms: typesPaymentTerms.optional(), phases: z.array(subscriptionPhaseResponse).optional(), plan: planResponse.optional(), plan_id: z.string().optional(), proration_behavior: typesProrationBehavior.optional(), start_date: z.string().optional(), status: typesStatus.optional(), subscription_status: typesSubscriptionStatus.optional(), subscription_type: typesSubscriptionType.optional(), synced_price_sequence: z.number().int().optional(), tenant_id: z.string().optional(), timezone: z.string().optional(), trial_end: z.string().optional(), trial_start: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional(), version: z.number().int().optional()}); export const typesTaxRateEntityType = z.enum(["customer", "subscription", "invoice", "tenant"]); export const typesTaxRateScope = z.enum(["INTERNAL", "EXTERNAL", "ONETIME"]); export const typesTaxRateStatus = z.enum(["ACTIVE", "INACTIVE"]); export const typesTaxRateType = z.enum(["percentage", "fixed"]); export const taxRateResponse = z.object({code: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), description: z.string().optional(), environment_id: z.string().optional(), fixed_value: z.string().optional(), id: z.string().optional(), metadata: z.record(z.string(), z.string()).optional(), name: z.string().optional(), percentage_value: z.string().optional(), scope: typesTaxRateScope.optional(), status: typesStatus.optional(), tax_rate_status: typesTaxRateStatus.optional(), tax_rate_type: typesTaxRateType.optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const taxAppliedResponse = z.object({applied_at: z.string().optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), entity_id: z.string().optional(), entity_type: typesTaxRateEntityType.optional(), environment_id: z.string().optional(), id: z.string().optional(), idempotency_key: z.string().optional(), metadata: z.record(z.string(), z.string()).optional(), status: typesStatus.optional(), tax_amount: z.string().optional(), tax_association_id: z.string().optional(), tax_rate: taxRateResponse.optional(), tax_rate_id: z.string().optional(), taxable_amount: z.string().optional(), tenant_id: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional()}); export const invoiceResponse: z.ZodType = z.object({adjustment_amount: z.string().optional(), amount_due: z.string().optional(), amount_paid: z.string().optional(), amount_remaining: z.string().optional(), billing_period: z.string().optional(), billing_reason: z.string().optional(), billing_sequence: z.number().int().optional(), coupon_applications: z.array(couponApplicationResponse).optional(), created_at: z.string().optional(), created_by: z.string().optional(), currency: z.string().optional(), customer: customerResponse.optional(), customer_id: z.string().optional(), description: z.string().optional(), due_date: z.string().optional(), environment_id: z.string().optional(), finalized_at: z.string().optional(), id: z.string().optional(), idempotency_key: z.string().optional(), invoice_number: z.string().optional(), invoice_pdf_url: z.string().optional(), invoice_status: typesInvoiceStatus.optional(), invoice_type: typesInvoiceType.optional(), issue_date: z.string().optional(), last_computed_at: z.string().optional(), line_items: z.array(invoiceLineItemResponse).optional(), metadata: typesMetadata.optional(), overpaid_amount: z.string().optional(), paid_at: z.string().optional(), payment_status: typesPaymentStatus.optional(), period_end: z.string().optional(), period_start: z.string().optional(), recalculated_invoice_id: z.string().optional(), refunded_amount: z.string().optional(), status: typesStatus.optional(), subscription: subscriptionResponse.optional(), subscription_customer_id: z.string().optional(), subscription_id: z.string().optional(), subtotal: z.string().optional(), taxes: z.array(taxAppliedResponse).optional(), tenant_id: z.string().optional(), total: z.string().optional(), total_discount: z.string().optional(), total_prepaid_credits_applied: z.string().optional(), total_tax: z.string().optional(), updated_at: z.string().optional(), updated_by: z.string().optional(), version: z.number().int().optional(), voided_at: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Recalculate draft invoice (v2) * * POST /invoices/{id}/recalculate-v2 */ export const createApiInvoicesIdRecalculateV2 = async (args: CreateApiInvoicesIdRecalculateV2Args, options?: CreateApiInvoicesIdRecalculateV2Options) => { const {baseUrl = "https://us.api.flexprice.io/v1", fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.finalize != null) query.append("finalize", String(args.finalize)) if (ApiKeyAuth !== undefined) headers.set("x-api-key", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/invoices/${encodeURIComponent(String(args.id))}/recalculate-v2${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(invoiceResponse, await res.json()) };