| // Code generated by @openmeter/typespec-go. DO NOT EDIT. | |
| package openmeter | |
| import "time" | |
| // Plan create request. | |
| type CreatePlanRequest struct { | |
| // Display name of the resource. | |
| // | |
| // Between 1 and 256 characters. | |
| Name string `json:"name"` | |
| // Optional description of the resource. | |
| // | |
| // Maximum 1024 characters. | |
| Description *string `json:"description,omitempty"` | |
| Labels *map[string]string `json:"labels,omitempty"` | |
| // A key is a semi-unique string that is used to identify the plan. It is used to | |
| // reference the latest `active` version of the plan and is unique with the version | |
| // number. | |
| Key string `json:"key"` | |
| // The currency code of the plan. | |
| Currency string `json:"currency"` | |
| // The billing cadence for subscriptions using this plan. | |
| BillingCadence string `json:"billing_cadence"` | |
| // Whether pro-rating is enabled for this plan. | |
| ProRatingEnabled *bool `json:"pro_rating_enabled,omitempty"` | |
| // The plan phases define the pricing ramp for a subscription. A phase switch | |
| // occurs only at the end of a billing period. At least one phase is required. | |
| Phases []PlanPhaseInput `json:"phases"` | |
| } | |
| // Plans provide a template for subscriptions. | |
| type Plan struct { | |
| ID string `json:"id"` | |
| // Display name of the resource. | |
| // | |
| // Between 1 and 256 characters. | |
| Name string `json:"name"` | |
| // Optional description of the resource. | |
| // | |
| // Maximum 1024 characters. | |
| Description *string `json:"description,omitempty"` | |
| Labels map[string]string `json:"labels,omitempty"` | |
| // An ISO-8601 timestamp representation of entity creation date. | |
| CreatedAt time.Time `json:"created_at"` | |
| // An ISO-8601 timestamp representation of entity last update date. | |
| UpdatedAt time.Time `json:"updated_at"` | |
| // An ISO-8601 timestamp representation of entity deletion date. | |
| DeletedAt *time.Time `json:"deleted_at,omitempty"` | |
| // A key is a semi-unique string that is used to identify the plan. It is used to | |
| // reference the latest `active` version of the plan and is unique with the version | |
| // number. | |
| Key string `json:"key"` | |
| // Plans are versioned to allow you to make changes without affecting running | |
| // subscriptions. | |
| Version int64 `json:"version"` | |
| // The currency code of the plan. | |
| Currency string `json:"currency"` | |
| // The billing cadence for subscriptions using this plan. | |
| BillingCadence string `json:"billing_cadence"` | |
| // Whether pro-rating is enabled for this plan. | |
| ProRatingEnabled *bool `json:"pro_rating_enabled,omitempty"` | |
| // The date and time when the plan becomes `active`. When not specified, the plan | |
| // is in `draft` status. | |
| EffectiveFrom *time.Time `json:"effective_from,omitempty"` | |
| // A scheduled date and time when the plan becomes `archived`. When not specified, | |
| // the plan is in `active` status indefinitely. | |
| EffectiveTo *time.Time `json:"effective_to,omitempty"` | |
| // The status of the plan. Computed based on the effective start and end dates: | |
| // | |
| // - `draft`: `effective_from` is not set. | |
| // - `scheduled`: `now < effective_from`. | |
| // - `active`: `effective_from <= now` and (`effective_to` is not set or | |
| // `now < effective_to`). | |
| // - `archived`: `effective_to <= now`. | |
| Status PlanStatus `json:"status"` | |
| // The plan phases define the pricing ramp for a subscription. A phase switch | |
| // occurs only at the end of a billing period. At least one phase is required. | |
| Phases []PlanPhase `json:"phases"` | |
| // Settlement mode for plan. | |
| // | |
| // Values: | |
| // | |
| // - `credit_then_invoice`: Credits are applied first, then any remainder is | |
| // invoiced. | |
| // - `credit_only`: Usage is settled exclusively against credits. | |
| SettlementMode *SettlementMode `json:"settlement_mode,omitempty"` | |
| // List of validation errors in `draft` state that prevent the plan from being | |
| // published. | |
| ValidationErrors []ProductCatalogValidationError `json:"validation_errors,omitempty"` | |
| } | |
| // Page paginated response. | |
| type PlanPagePaginatedResponse struct { | |
| Data []Plan `json:"data"` | |
| Meta PaginatedMeta `json:"meta"` | |
| } | |
| // The plan phase or pricing ramp allows changing a plan's rate cards over time as | |
| // a subscription progresses. | |
| type PlanPhase struct { | |
| // Display name of the resource. | |
| // | |
| // Between 1 and 256 characters. | |
| Name string `json:"name"` | |
| // Optional description of the resource. | |
| // | |
| // Maximum 1024 characters. | |
| Description *string `json:"description,omitempty"` | |
| Labels map[string]string `json:"labels,omitempty"` | |
| Key string `json:"key"` | |
| // The duration of the phase. When not specified, the phase runs indefinitely. Only | |
| // the last phase may omit the duration. | |
| Duration *string `json:"duration,omitempty"` | |
| // The rate cards of the plan. | |
| RateCards []RateCard `json:"rate_cards"` | |
| } | |
| // The plan phase or pricing ramp allows changing a plan's rate cards over time as | |
| // a subscription progresses. | |
| type PlanPhaseInput struct { | |
| // Display name of the resource. | |
| // | |
| // Between 1 and 256 characters. | |
| Name string `json:"name"` | |
| // Optional description of the resource. | |
| // | |
| // Maximum 1024 characters. | |
| Description *string `json:"description,omitempty"` | |
| Labels *map[string]string `json:"labels,omitempty"` | |
| Key string `json:"key"` | |
| // The duration of the phase. When not specified, the phase runs indefinitely. Only | |
| // the last phase may omit the duration. | |
| Duration *string `json:"duration,omitempty"` | |
| // The rate cards of the plan. | |
| RateCards []RateCardInput `json:"rate_cards"` | |
| } | |
| // The status of a plan. | |
| // | |
| // - `draft`: The plan has not yet been published and can be edited. | |
| // - `active`: The plan is published and can be used in subscriptions. | |
| // - `archived`: The plan is no longer available for use. | |
| // - `scheduled`: The plan is scheduled to be published at a future date. | |
| type PlanStatus string | |
| const ( | |
| PlanStatusDraft PlanStatus = "draft" | |
| PlanStatusActive PlanStatus = "active" | |
| PlanStatusArchived PlanStatus = "archived" | |
| PlanStatusScheduled PlanStatus = "scheduled" | |
| ) | |
| func (value PlanStatus) Valid() bool { | |
| switch value { | |
| case PlanStatusDraft, PlanStatusActive, PlanStatusArchived, PlanStatusScheduled: | |
| return true | |
| default: | |
| return false | |
| } | |
| } | |
| // Plan upsert request. | |
| type UpsertPlanRequest struct { | |
| // Display name of the resource. | |
| // | |
| // Between 1 and 256 characters. | |
| Name string `json:"name"` | |
| // Optional description of the resource. | |
| // | |
| // Maximum 1024 characters. | |
| Description *string `json:"description,omitempty"` | |
| Labels *map[string]string `json:"labels,omitempty"` | |
| // Whether pro-rating is enabled for this plan. | |
| ProRatingEnabled *bool `json:"pro_rating_enabled,omitempty"` | |
| // The plan phases define the pricing ramp for a subscription. A phase switch | |
| // occurs only at the end of a billing period. At least one phase is required. | |
| Phases []PlanPhaseInput `json:"phases"` | |
| } | |