openapi: 3.1.0 info: title: Lago API documentation Add_ons Subscriptions API description: Lago API allows your application to push customer information and metrics (events) from your application to the billing application. version: 1.15.0 license: name: AGPLv3 identifier: AGPLv3 contact: email: tech@getlago.com servers: - url: https://api.getlago.com/api/v1 description: US Lago cluster - url: https://api.eu.getlago.com/api/v1 description: EU Lagos cluster security: - bearerAuth: [] tags: - name: Subscriptions description: Everything about Subscription collection externalDocs: description: Find out more url: https://doc.getlago.com/docs/api/subscriptions/subscription-object paths: /subscriptions: post: tags: - Subscriptions summary: Lago Assign a plan to a customer description: This endpoint assigns a plan to a customer, creating or modifying a subscription. Ideal for initial subscriptions or plan changes (upgrades/downgrades). operationId: createSubscription requestBody: description: Subscription payload content: application/json: schema: $ref: '#/components/schemas/SubscriptionCreateInput' required: true responses: '200': description: Subscription created content: application/json: schema: $ref: '#/components/schemas/Subscription' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' get: tags: - Subscriptions summary: Lago List all subscriptions description: This endpoint retrieves all active subscriptions. operationId: findAllSubscriptions parameters: - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/per_page' - name: external_customer_id in: query description: The customer external unique identifier (provided by your own application) required: false explode: true schema: type: string example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba - name: plan_code in: query description: The unique code representing the plan to be attached to the customer. This code must correspond to the code property of one of the active plans. required: false explode: true schema: type: string example: premium - name: status[] in: query description: 'If the field is not defined, Lago will return only `active` subscriptions. However, if you wish to fetch subscriptions by different status you can define them in a status[] query param. Available filter values: `pending`, `canceled`, `terminated`, `active`.' required: false explode: true schema: type: array items: type: string enum: - pending - canceled - terminated - active example: - active - pending responses: '200': description: List of subscriptions content: application/json: schema: $ref: '#/components/schemas/SubscriptionsPaginated' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /subscriptions/{external_id}: parameters: - name: external_id in: path description: External ID of the existing subscription required: true schema: type: string example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba get: tags: - Subscriptions summary: Lago Retrieve a subscription description: This endpoint retrieves a specific subscription. operationId: findSubscription responses: '200': description: Subscription content: application/json: schema: $ref: '#/components/schemas/Subscription' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: tags: - Subscriptions summary: Lago Update a subscription description: This endpoint allows you to update a subscription. operationId: updateSubscription requestBody: description: Update an existing subscription content: application/json: schema: $ref: '#/components/schemas/SubscriptionUpdateInput' required: true responses: '200': description: Subscription updated content: application/json: schema: $ref: '#/components/schemas/Subscription' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' delete: tags: - Subscriptions summary: Lago Terminate a subscription description: This endpoint allows you to terminate a subscription. operationId: destroySubscription parameters: - name: status in: query description: If the field is not defined, Lago will terminate only `active` subscriptions. However, if you wish to cancel a `pending` subscription, please ensure that you include `status=pending` in your request. required: false explode: true schema: type: string example: pending responses: '200': description: Subscription terminated content: application/json: schema: $ref: '#/components/schemas/Subscription' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/NotAllowed' /subscriptions/{external_id}/lifetime_usage: parameters: - name: external_id in: path description: External ID of the existing subscription required: true schema: type: string example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba get: tags: - Subscriptions summary: Lago Retrive subscription lifetime usage description: This endpoint enables the retrieval of the lifetime usage of a subscription. operationId: getSubscriptionLifetimeUsage responses: '200': description: Subscription lifetime usage content: application/json: schema: $ref: '#/components/schemas/LifetimeUsage' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: tags: - Subscriptions summary: Lago Update a subscription lifetime usage description: This endpoint allows you to update the lifetime usage of a subscription. operationId: updateSubscriptionLifetimeUsage requestBody: description: Update the lifetime usage of a subscription content: application/json: schema: $ref: '#/components/schemas/LifetimeUsageInput' required: true responses: '200': description: Subscription lifetime usage updated content: application/json: schema: $ref: '#/components/schemas/LifetimeUsage' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' components: schemas: ChargeFilterObject: type: object description: Values used to apply differentiated pricing based on additional event properties. required: - invoice_display_name - properties - values properties: invoice_display_name: type: string description: Specifies the name that will be displayed on an invoice. If no value is set for this field, the values of the filter will be used as the default display name. example: AWS nullable: true properties: allOf: - $ref: '#/components/schemas/ChargeProperties' - description: List of all thresholds utilized for calculating the charge. values: type: object description: List of possible filter values. The key and values must match one of the billable metric filters. additionalProperties: type: array items: type: string example: region: - us-east-1 LifetimeUsageInput: type: object required: - lifetime_usage properties: lifetime_usage: type: object required: - external_historical_usage_amount_cents properties: external_historical_usage_amount_cents: type: integer example: 100 description: The historical usage amount in cents for the subscription (provided by your own application). PaginationMeta: type: object required: - current_page - total_pages - total_count properties: current_page: type: integer description: Current page. example: 2 next_page: type: integer description: Next page. example: 3 nullable: true prev_page: type: integer description: Previous page. example: 1 nullable: true total_pages: type: integer description: Total number of pages. example: 4 total_count: type: integer description: Total number of records. example: 70 UsageThresholdObject: type: object required: - lago_id - amount_cents - recurring - created_at - updated_at properties: lago_id: type: string format: uuid description: Unique identifier of the usage threshold created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 threshold_display_name: type: string nullable: true description: The display name of the usage threshold. example: Threshold 1 amount_cents: type: integer description: The amount to reach to trigger a `progressive_billing` invoice. example: 10000 recurring: type: boolean description: This field when set to `true` indicates that a `progressive_billing` invoice will be created every time the lifetime usage increases by the specified amount. example: true created_at: type: string format: date-time description: The date and time when the usage threshold was created. It is expressed in UTC format according to the ISO 8601 datetime standard. example: '2023-06-27T19:43:42Z' updated_at: type: string format: date-time description: The date and time when the usage threshold was last updated. It is expressed in UTC format according to the ISO 8601 datetime standard. example: '2023-06-27T19:43:42Z' MinimumCommitmentObject: type: object nullable: true required: - lago_id - amount_cents - created_at properties: lago_id: type: string format: uuid description: Unique identifier of the minimum commitment, created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 plan_code: type: string example: premium description: The unique code representing the plan to be attached to the customer. amount_cents: type: integer description: The amount of the minimum commitment in cents. example: 100000 invoice_display_name: type: string description: Specifies the name that will be displayed on an invoice. If no value is set for this field, the default name will be used as the display name. example: Minimum Commitment (C1) interval: type: string description: 'The interval used for recurring billing. It represents the frequency at which subscription billing occurs. The interval can be one of the following values: `yearly`, `quarterly`, `monthly` or `weekly`.' enum: - weekly - monthly - quarterly - yearly example: monthly created_at: type: string format: date-time description: The date and time when the minimum commitment was created. It is expressed in UTC format according to the ISO 8601 datetime standard. This field provides the timestamp for the exact moment when the minimum commitment was initially created. example: '2022-04-29T08:59:51Z' updated_at: type: string format: date-time description: The date and time when the minimum commitment was updated. It is expressed in UTC format according to the ISO 8601 datetime standard. This field provides the timestamp for the exact moment when the minimum commitment was initially created. example: '2022-04-29T08:59:51Z' taxes: type: array description: All taxes applied to the minimum commitment. items: $ref: '#/components/schemas/TaxObject' LifetimeUsage: type: object required: - lifetime_usage properties: lifetime_usage: $ref: '#/components/schemas/LifetimeUsageObject' LifetimeUsageObject: type: object required: - lago_id - lago_subscription_id - external_subscription_id - external_historical_usage_amount_cents - invoiced_usage_amount_cents - current_usage_amount_cents - from_datetime - to_datetime properties: lago_id: type: string format: uuid example: 1a901a90-1a90-1a90-1a90-1a901a901a90 description: Unique identifier assigned to the lifetime usage record within the Lago application. This ID is exclusively created by Lago and serves as a unique identifier for the lifetime usage record within the Lago system lago_subscription_id: type: string format: uuid example: 1a901a90-1a90-1a90-1a90-1a901a901a90 description: Unique identifier assigned to the subscription record within the Lago application. This ID is exclusively created by Lago and serves as a unique identifier for the subscription record within the Lago system external_subscription_id: type: string example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba description: The subscription external unique identifier (provided by your own application). external_historical_usage_amount_cents: type: integer example: 100 description: The historical usage amount in cents for the subscription (provided by your own application). invoiced_usage_amount_cents: type: integer example: 100 description: The total invoiced usage amount in cents for the subscription. current_usage_amount_cents: type: integer example: 100 description: The current usage amount in cents for the subscription on the current billing period. from_datetime: type: string format: date-time example: '2024-01-01T00:00:00Z' description: The recording start date and time of the subscription lifetime usage. The date and time must be in ISO 8601 format. to_datetime: type: string format: date-time example: '2024-12-31T23:59:59Z' description: The recording end date and time of the subscription lifetime usage. The date and time must be in ISO 8601 format. usage_thresholds: type: array description: Array of usage thresholds attached to the subscription's plan. items: $ref: '#/components/schemas/LifetimeUsageThresholdObject' Subscription: type: object required: - subscription properties: subscription: $ref: '#/components/schemas/SubscriptionObjectExtended' ApiErrorNotAllowed: type: object required: - status - error - code properties: status: type: integer format: int32 example: 405 error: type: string example: Method Not Allowed code: type: string example: not_allowed ApiErrorNotFound: type: object required: - status - error - code properties: status: type: integer format: int32 example: 404 error: type: string example: Not Found code: type: string example: object_not_found ChargeProperties: type: object properties: graduated_ranges: type: array description: Graduated ranges, sorted from bottom to top tiers, used for a `graduated` charge model. items: type: object required: - from_value - to_value - flat_amount - per_unit_amount properties: from_value: type: integer description: Specifies the lower value of a tier for a `graduated` charge model. It must be either 0 or the previous range's `to_value + 1` to maintain the proper sequence of values. example: 0 to_value: type: integer description: 'Specifies the highest value of a tier for a `graduated` charge model. - This value must be higher than the from_value of the same tier. - This value must be null for the last tier.' nullable: true example: 10 flat_amount: type: string pattern: ^[0-9]+.?[0-9]*$ description: The flat amount for a whole tier, excluding tax, for a `graduated` charge model. It is expressed as a decimal value. example: '10' per_unit_amount: type: string pattern: ^[0-9]+.?[0-9]*$ description: The unit price, excluding tax, for a specific tier of a `graduated` charge model. It is expressed as a decimal value. example: '0.5' graduated_percentage_ranges: type: array description: Graduated percentage ranges, sorted from bottom to top tiers, used for a `graduated_percentage` charge model. items: type: object required: - from_value - to_value - rate - flat_amount properties: from_value: type: integer description: Specifies the lower value of a tier for a `graduated_percentage` charge model. It must be either 0 or the previous range's `to_value + 1` to maintain the proper sequence of values. example: 0 to_value: type: integer description: 'Specifies the highest value of a tier for a `graduated_percentage` charge model. - This value must be higher than the from_value of the same tier. - This value must be null for the last tier.' nullable: true example: 10 rate: type: string format: ^[0-9]+.?[0-9]*$ description: The percentage rate that is applied to the amount of each transaction in the tier for a `graduated_percentage` charge model. It is expressed as a decimal value. example: '1' flat_amount: type: string format: ^[0-9]+.?[0-9]*$ description: The flat amount for a whole tier, excluding tax, for a `graduated_percentage` charge model. It is expressed as a decimal value. example: '10' amount: type: string pattern: ^[0-9]+.?[0-9]*$ description: '- The unit price, excluding tax, for a `standard` charge model. It is expressed as a decimal value. - The amount, excluding tax, for a complete set of units in a `package` charge model. It is expressed as a decimal value.' example: '30' free_units: type: integer description: The quantity of units that are provided free of charge for each billing period in a `package` charge model. This field specifies the number of units that customers can use without incurring any additional cost during each billing cycle. example: 100 package_size: type: integer description: The quantity of units included in each pack or set for a `package` charge model. It indicates the number of units that are bundled together as a single package or set within the pricing structure. example: 1000 rate: type: string pattern: ^[0-9]+.?[0-9]*$ description: The percentage rate that is applied to the amount of each transaction for a `percentage` charge model. It is expressed as a decimal value. example: '1' fixed_amount: type: string pattern: ^[0-9]+.?[0-9]*$ description: The fixed fee that is applied to each transaction for a `percentage` charge model. It is expressed as a decimal value. example: '0.5' free_units_per_events: type: integer description: The count of transactions that are not impacted by the `percentage` rate and fixed fee in a percentage charge model. This field indicates the number of transactions that are exempt from the calculation of charges based on the specified percentage rate and fixed fee. nullable: true example: 5 free_units_per_total_aggregation: type: string pattern: ^[0-9]+.?[0-9]*$ description: The transaction amount that is not impacted by the `percentage` rate and fixed fee in a percentage charge model. This field indicates the portion of the transaction amount that is exempt from the calculation of charges based on the specified percentage rate and fixed fee. nullable: true example: '500' per_transaction_max_amount: type: string format: ^[0-9]+.?[0-9]*$ description: Specifies the maximum allowable spending for a single transaction. Working as a transaction cap. nullable: true example: '3.75' per_transaction_min_amount: type: string format: ^[0-9]+.?[0-9]*$ description: Specifies the minimum allowable spending for a single transaction. Working as a transaction floor. nullable: true example: '1.75' grouped_by: type: array description: The list of event properties that are used to group the events on the invoice for a `standard` charge model. items: type: string example: - agent_name volume_ranges: type: array description: Volume ranges, sorted from bottom to top tiers, used for a `volume` charge model. items: type: object required: - from_value - to_value - flat_amount - per_unit_amount properties: from_value: type: integer description: Specifies the lower value of a tier for a `volume` charge model. It must be either 0 or the previous range's `to_value + 1` to maintain the proper sequence of values. example: 0 to_value: type: integer description: 'Specifies the highest value of a tier for a `volume` charge model. - This value must be higher than the `from_value` of the same tier. - This value must be `null` for the last tier.' nullable: true example: 10 flat_amount: type: string pattern: ^[0-9]+.?[0-9]*$ description: The unit price, excluding tax, for a specific tier of a `volume` charge model. It is expressed as a decimal value. example: '10' per_unit_amount: type: string pattern: ^[0-9]+.?[0-9]*$ description: The flat amount for a whole tier, excluding tax, for a `volume` charge model. It is expressed as a decimal value. example: '0.5' SubscriptionObject: type: object required: - lago_id - lago_customer_id - billing_time - external_customer_id - created_at - subscription_at - plan_code - external_id - status properties: lago_id: type: string format: uuid example: 1a901a90-1a90-1a90-1a90-1a901a901a90 description: Unique identifier assigned to the subscription within the Lago application. This ID is exclusively created by Lago and serves as a unique identifier for the subscription's record within the Lago system external_id: type: string example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba description: The subscription external unique identifier (provided by your own application). lago_customer_id: type: string format: uuid example: 1a901a90-1a90-1a90-1a90-1a901a901a90 description: Unique identifier assigned to the customer within the Lago application. This ID is exclusively created by Lago and serves as a unique identifier for the customer's record within the Lago system external_customer_id: type: string example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba description: The customer external unique identifier (provided by your own application). billing_time: type: string description: The billing time for the subscription, which can be set as either `anniversary` or `calendar`. If not explicitly provided, it will default to `calendar`. The billing time determines the timing of recurring billing cycles for the subscription. By specifying `anniversary`, the billing cycle will be based on the specific date the subscription started (billed fully), while `calendar` sets the billing cycle at the first day of the week/month/year (billed with proration). example: anniversary enum: - calendar - anniversary name: type: string example: Repository A description: The display name of the subscription on an invoice. This field allows for customization of the subscription's name for billing purposes, especially useful when a single customer has multiple subscriptions using the same plan. nullable: true plan_code: type: string example: premium description: The unique code representing the plan to be attached to the customer. This code must correspond to the `code` property of one of the active plans. status: type: string description: 'The status of the subscription, which can have the following values: - `pending`: a previous subscription has been downgraded, and the current one is awaiting automatic activation at the end of the billing period. - `active`: the subscription is currently active and applied to the customer. - `terminated`: the subscription is no longer active. - `canceled`: the subscription has been stopped before its activation. This can occur when two consecutive downgrades have been applied to a customer or when a subscription with a pending status is terminated.' example: active enum: - active - pending - terminated - canceled created_at: type: string format: date-time example: '2022-08-08T00:00:00Z' description: The creation date of the subscription, represented in ISO 8601 datetime format and expressed in Coordinated Universal Time (UTC). This date provides a timestamp indicating when the subscription was initially created. canceled_at: type: string format: date-time example: '2022-09-14T16:35:31Z' description: The cancellation date of the subscription. This field is not null when the subscription is `canceled`. This date should be provided in ISO 8601 datetime format and expressed in Coordinated Universal Time (UTC). nullable: true started_at: type: string format: date-time example: '2022-08-08T00:00:00Z' description: The effective start date of the subscription. This field can be null if the subscription is `pending` or `canceled`. This date should be provided in ISO 8601 datetime format and expressed in Coordinated Universal Time (UTC). nullable: true ending_at: type: string format: date-time example: '2022-10-08T00:00:00Z' description: The effective end date of the subscription. If this field is set to null, the subscription will automatically renew. This date should be provided in ISO 8601 datetime format, and use Coordinated Universal Time (UTC). subscription_at: type: string format: date-time example: '2022-08-08T00:00:00Z' description: The anniversary date and time of the initial subscription. This date serves as the basis for billing subscriptions with `anniversary` billing time. The `anniversary_date` should be provided in ISO 8601 datetime format and expressed in Coordinated Universal Time (UTC). terminated_at: type: string format: date-time example: '2022-09-14T16:35:31Z' description: The termination date of the subscription. This field is not null when the subscription is `terminated`. This date should be provided in ISO 8601 datetime format and expressed in Coordinated Universal Time (UTC) nullable: true previous_plan_code: type: string example: null description: The code identifying the previous plan associated with this subscription. nullable: true next_plan_code: type: string example: null description: The code identifying the next plan in the case of a downgrade. nullable: true downgrade_plan_date: type: string format: date example: '2022-04-30' description: The date when the plan will be downgraded, represented in ISO 8601 date format. nullable: true trial_ended_at: type: string format: date-time example: '2022-08-08T00:00:00Z' description: The date when the free trial is ended, represented in ISO 8601 date format. nullable: true current_billing_period_started_at: type: string format: date-time example: '2022-08-08T00:00:00Z' description: The date and time when the current billing period started, represented in ISO 8601 date format. nullable: true current_billing_period_ending_at: type: string format: date-time example: '2022-09-08T00:00:00Z' description: The date and time when the current billing period ends, represented in ISO 8601 date format. nullable: true PlanObject: type: object required: - lago_id - name - created_at - code - interval - amount_cents - amount_currency - active_subscriptions_count - draft_invoices_count properties: lago_id: type: string format: uuid description: Unique identifier of the plan created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 name: type: string description: The name of the plan. example: Startup invoice_display_name: type: string description: Specifies the name that will be displayed on an invoice. If no value is set for this field, the name of the plan will be used as the default display name. example: Startup plan created_at: type: string format: date-time description: The date and time when the plan was created. It is expressed in UTC format according to the ISO 8601 datetime standard. This field provides the timestamp for the exact moment when the plan was initially created. example: '2023-06-27T19:43:42Z' code: type: string description: The code of the plan. It serves as a unique identifier associated with a particular plan. The code is typically used for internal or system-level identification purposes, like assigning a subscription, for instance. example: startup interval: type: string description: 'The interval used for recurring billing. It represents the frequency at which subscription billing occurs. The interval can be one of the following values: `yearly`, `quarterly`, `monthly` or `weekly`.' enum: - weekly - monthly - quarterly - yearly example: monthly description: type: string description: The description on the plan. example: '' amount_cents: type: integer description: The base cost of the plan, excluding any applicable taxes, that is billed on a recurring basis. This value is defined at 0 if your plan is a pay-as-you-go plan. example: 10000 amount_currency: allOf: - $ref: '#/components/schemas/Currency' - description: The currency of the plan. It indicates the monetary unit in which the plan's cost, including taxes and usage-based charges, is expressed. example: USD trial_period: type: number description: The duration in days during which the base cost of the plan is offered for free. example: 5 pay_in_advance: type: boolean description: This field determines the billing timing for the plan. When set to `true`, the base cost of the plan is due at the beginning of each billing period. Conversely, when set to `false`, the base cost of the plan is due at the end of each billing period. example: true bill_charges_monthly: type: boolean nullable: true description: This field, when set to `true`, enables to invoice usage-based charges on monthly basis, even if the cadence of the plan is yearly. This allows customers to pay charges overage on a monthly basis. This can be set to true only if the plan's interval is `yearly`. example: null active_subscriptions_count: type: integer description: The count of active subscriptions that are currently associated with the plan. This field provides valuable information regarding the impact of deleting the plan. By checking the value of this field, you can determine the number of subscriptions that will be affected if the plan is deleted. example: 0 draft_invoices_count: type: integer description: The number of draft invoices that include a subscription attached to the plan. This field provides valuable information about the impact of deleting the plan. By checking the value of this field, you can determine the number of draft invoices that will be affected if the plan is deleted. example: 0 minimum_commitment: $ref: '#/components/schemas/MinimumCommitmentObject' charges: type: array items: $ref: '#/components/schemas/ChargeObject' description: Additional usage-based charges for this plan. example: - lago_id: 1a901a90-1a90-1a90-1a90-1a901a901a91 lago_billable_metric_id: 1a901a90-1a90-1a90-1a90-1a901a901a91 billable_metric_code: requests created_at: '2023-06-27T19:43:42Z' charge_model: package invoiceable: true invoice_display_name: Setup pay_in_advance: false regroup_paid_fees: null prorated: false min_amount_cents: 3000 properties: amount: '30' free_units: 100 package_size: 1000 filters: [] - lago_id: 1a901a90-1a90-1a90-1a90-1a901a901a92 lago_billable_metric_id: 1a901a90-1a90-1a90-1a90-1a901a901a92 billable_metric_code: cpu created_at: '2023-06-27T19:43:42Z' charge_model: graduated invoiceable: true invoice_display_name: Setup pay_in_advance: false prorated: false min_amount_cents: 0 properties: graduated_ranges: - from_value: 0 to_value: 10 flat_amount: '10' per_unit_amount: '0.5' - from_value: 11 to_value: null flat_amount: '0' per_unit_amount: '0.4' filters: [] - lago_id: 1a901a90-1a90-1a90-1a90-1a901a901a93 lago_billable_metric_id: 1a901a90-1a90-1a90-1a90-1a901a901a93 billable_metric_code: seats created_at: '2023-06-27T19:43:42Z' charge_model: standard invoiceable: true invoice_display_name: Setup pay_in_advance: true prorated: false min_amount_cents: 0 properties: {} filters: - invoice_display_name: Europe properties: amount: '10' values: region: - Europe - invoice_display_name: USA properties: amount: '5' values: region: - USA - invoice_display_name: Africa properties: amount: '8' values: region: - Africa - lago_id: 1a901a90-1a90-1a90-1a90-1a901a901a94 lago_billable_metric_id: 1a901a90-1a90-1a90-1a90-1a901a901a94 billable_metric_code: storage created_at: '2023-06-27T19:43:42Z' charge_model: volume invoiceable: true invoice_display_name: Setup pay_in_advance: false prorated: false min_amount_cents: 0 properties: volume_ranges: - from_value: 0 to_value: 100 flat_amount: '0' per_unit_amount: '0' - from_value: 101 to_value: null flat_amount: '0' per_unit_amount: '0.5' filters: [] - lago_id: 1a901a90-1a90-1a90-1a90-1a901a901a95 lago_billable_metric_id: 1a901a90-1a90-1a90-1a90-1a901a901a95 billable_metric_code: payments created_at: '2023-06-27T19:43:42Z' charge_model: percentage invoiceable: false invoice_display_name: Setup pay_in_advance: true regroup_paid_fees: invoice prorated: false min_amount_cents: 0 properties: rate: '1' fixed_amount: '0.5' free_units_per_events: 5 free_units_per_total_aggregation: '500' filters: [] taxes: type: array description: All taxes applied to the plan. items: $ref: '#/components/schemas/TaxObject' usage_thresholds: type: array description: List of usage thresholds applied to the plan. items: $ref: '#/components/schemas/UsageThresholdObject' SubscriptionsPaginated: type: object required: - subscriptions - meta properties: subscriptions: type: array items: $ref: '#/components/schemas/SubscriptionObject' meta: $ref: '#/components/schemas/PaginationMeta' ApiErrorUnprocessableEntity: type: object required: - status - error - code - error_details properties: status: type: integer format: int32 example: 422 error: type: string example: Unprocessable entity code: type: string example: validation_errors error_details: type: object ChargeFilterInput: type: object description: Values used to apply differentiated pricing based on additional event properties. properties: invoice_display_name: type: string description: Specifies the name that will be displayed on an invoice. If no value is set for this field, the values of the filter will be used as the default display name. example: AWS nullable: true properties: allOf: - $ref: '#/components/schemas/ChargeProperties' - description: List of all thresholds utilized for calculating the charge. values: type: object description: List of possible filter values. The key and values must match one of the billable metric filters. additionalProperties: type: array items: type: string example: region: - us-east-1 LifetimeUsageThresholdObject: type: object required: - amount_cents - completion_ratio - reached_at properties: amount_cents: type: integer description: The usage threshold amount in cents. example: 100 completion_ratio: type: number description: The completion ratio of the usage threshold. example: 0.5 reached_at: type: string format: date-time description: The date and time when the usage threshold was reached. The date and time must be in ISO 8601 format. example: '2024-01-01T00:00:00Z' nullable: true ApiErrorUnauthorized: type: object required: - status - error properties: status: type: integer format: int32 example: 401 error: type: string example: Unauthorized SubscriptionUpdateInput: type: object required: - subscription properties: status: type: string enum: - active - pending example: active description: If the field is not defined and multiple `active` and `pending` subscriptions exists, Lago will update the `active` subscription. However, if you wish to update a `pending` subscription, please ensure that you include the `status` attribute with the `pending` value in your request body. subscription: type: object required: - ending_at properties: name: type: string example: Repository B nullable: true description: The display name of the subscription on an invoice. This field allows for customization of the subscription's name for billing purposes, especially useful when a single customer has multiple subscriptions using the same plan. ending_at: type: string format: date-time example: '2022-10-08T00:00:00Z' nullable: true description: The effective end date of the subscription. If this field is set to null, the subscription will automatically renew. This date should be provided in ISO 8601 datetime format, and use Coordinated Universal Time (UTC). subscription_at: type: string format: date-time example: '2022-08-08T00:00:00Z' description: The start date and time of the subscription. This field can only be modified for pending subscriptions that have not yet started. This date should be provided in ISO 8601 datetime format and expressed in Coordinated Universal Time (UTC). plan_overrides: $ref: '#/components/schemas/PlanOverridesObject' ApiErrorBadRequest: type: object required: - status - error properties: status: type: integer format: int32 example: 400 error: type: string example: Bad request Currency: type: string example: USD enum: - AED - AFN - ALL - AMD - ANG - AOA - ARS - AUD - AWG - AZN - BAM - BBD - BDT - BGN - BIF - BMD - BND - BOB - BRL - BSD - BWP - BYN - BZD - CAD - CDF - CHF - CLF - CLP - CNY - COP - CRC - CVE - CZK - DJF - DKK - DOP - DZD - EGP - ETB - EUR - FJD - FKP - GBP - GEL - GIP - GMD - GNF - GTQ - GYD - HKD - HNL - HRK - HTG - HUF - IDR - ILS - INR - ISK - JMD - JPY - KES - KGS - KHR - KMF - KRW - KYD - KZT - LAK - LBP - LKR - LRD - LSL - MAD - MDL - MGA - MKD - MMK - MNT - MOP - MRO - MUR - MVR - MWK - MXN - MYR - MZN - NAD - NGN - NIO - NOK - NPR - NZD - PAB - PEN - PGK - PHP - PKR - PLN - PYG - QAR - RON - RSD - RUB - RWF - SAR - SBD - SCR - SEK - SGD - SHP - SLL - SOS - SRD - STD - SZL - THB - TJS - TOP - TRY - TTD - TWD - TZS - UAH - UGX - USD - UYU - UZS - VND - VUV - WST - XAF - XCD - XOF - XPF - YER - ZAR - ZMW ChargeObject: type: object required: - lago_id - lago_billable_metric_id - billable_metric_code - created_at - charge_model properties: lago_id: type: string format: uuid description: Unique identifier of charge, created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 lago_billable_metric_id: type: string format: uuid description: Unique identifier of the billable metric created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 billable_metric_code: type: string description: Unique code identifying a billable metric. example: requests invoice_display_name: type: string description: Specifies the name that will be displayed on an invoice. If no value is set for this field, the name of the actual charge will be used as the default display name. example: Setup created_at: type: string format: date-time description: The date and time when the charge was created. It is expressed in UTC format according to the ISO 8601 datetime standard. example: '2022-09-14T16:35:31Z' charge_model: type: string description: Specifies the pricing model used for the calculation of the final fee. It can be `standard`, `graduated`, `graduated_percentage`, `package`, `percentage`, `volume` or `dynamic`. enum: - standard - graduated - graduated_percentage - package - percentage - volume - dynamic pay_in_advance: type: boolean description: This field determines the billing timing for this specific usage-based charge. When set to `true`, the charge is due and invoiced immediately. Conversely, when set to `false`, the charge is due and invoiced at the end of each billing period. example: true invoiceable: type: boolean description: This field specifies whether the charge should be included in a proper invoice. If set to `false`, no invoice will be issued for this charge. You can only set it to `false` when `pay_in_advance` is `true`. example: true regroup_paid_fees: type: string nullable: true enum: - null - invoice description: 'This setting can only be configured if `pay_in_advance` is `true` and `invoiceable` is `false`. This field determines whether and when the charge fee should be included in the invoice. If `null`, no invoice will be issued for this charge fee. If `invoice`, an invoice will be generated at the end of the period, consolidating all charge fees with a succeeded payment status.' example: invoice prorated: type: boolean example: false description: 'Specifies whether a charge is prorated based on the remaining number of days in the billing period or billed fully. - If set to `true`, the charge is prorated based on the remaining days in the current billing period. - If set to `false`, the charge is billed in full. - If not defined in the request, default value is `false`.' min_amount_cents: type: integer description: The minimum spending amount required for the charge, measured in cents and excluding any applicable taxes. It indicates the minimum amount that needs to be charged for each billing period. example: 1200 properties: allOf: - $ref: '#/components/schemas/ChargeProperties' - description: List of all thresholds utilized for calculating the charge. filters: type: array description: List of filters used to apply differentiated pricing based on additional event properties. items: $ref: '#/components/schemas/ChargeFilterObject' taxes: type: array description: All taxes applied to the charge. items: $ref: '#/components/schemas/TaxObject' SubscriptionCreateInput: type: object required: - subscription properties: subscription: type: object required: - external_customer_id - plan_code - external_id properties: external_customer_id: type: string example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba description: The customer external unique identifier (provided by your own application) plan_code: type: string example: premium description: The unique code representing the plan to be attached to the customer. This code must correspond to the `code` property of one of the active plans. name: type: string example: Repository A description: The display name of the subscription on an invoice. This field allows for customization of the subscription's name for billing purposes, especially useful when a single customer has multiple subscriptions using the same plan. external_id: type: string example: my_sub_1234567890 description: The unique external identifier for the subscription. This identifier serves as an idempotency key, ensuring that each subscription is unique. billing_time: type: string description: The billing time for the subscription, which can be set as either `anniversary` or `calendar`. If not explicitly provided, it will default to `calendar`. The billing time determines the timing of recurring billing cycles for the subscription. By specifying `anniversary`, the billing cycle will be based on the specific date the subscription started (billed fully), while `calendar` sets the billing cycle at the first day of the week/month/year (billed with proration). example: anniversary enum: - calendar - anniversary ending_at: type: string format: date-time example: '2022-10-08T00:00:00Z' description: The effective end date of the subscription. If this field is set to null, the subscription will automatically renew. This date should be provided in ISO 8601 datetime format, and use Coordinated Universal Time (UTC). subscription_at: type: string format: date-time example: '2022-08-08T00:00:00Z' description: The start date for the subscription, allowing for the creation of subscriptions that can begin in the past or future. Please note that it cannot be used to update the start date of a pending subscription or schedule an upgrade/downgrade. The start_date should be provided in ISO 8601 datetime format and expressed in Coordinated Universal Time (UTC). plan_overrides: $ref: '#/components/schemas/PlanOverridesObject' SubscriptionObjectExtended: allOf: - $ref: '#/components/schemas/SubscriptionObject' - type: object properties: plan: $ref: '#/components/schemas/PlanObject' PlanOverridesObject: type: object description: Based plan overrides. properties: amount_cents: type: integer description: The base cost of the plan, excluding any applicable taxes, that is billed on a recurring basis. This value is defined at 0 if your plan is a pay-as-you-go plan. example: 10000 amount_currency: allOf: - $ref: '#/components/schemas/Currency' - description: The currency of the plan. It indicates the monetary unit in which the plan's cost, including taxes and usage-based charges, is expressed. example: USD description: type: string description: The description on the plan. example: Plan for early stage startups. invoice_display_name: type: string example: Startup plan description: Specifies the name that will be displayed on an invoice. If no value is set for this field, the name of the plan will be used as the default display name. name: type: string example: Startup description: The name of the plan. tax_codes: type: array items: type: string description: List of unique code used to identify the taxes. example: - french_standard_vat trial_period: type: number description: The duration in days during which the base cost of the plan is offered for free. example: 5 minimum_commitment: $ref: '#/components/schemas/MinimumCommitmentObject' charges: type: array description: Additional usage-based charges for this plan. items: type: object properties: id: type: string format: uuid description: Unique identifier of the charge created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 billable_metric_id: type: string format: uuid description: Unique identifier of the billable metric created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 invoice_display_name: type: string description: Specifies the name that will be displayed on an invoice. If no value is set for this field, the name of the actual charge will be used as the default display name. example: Setup min_amount_cents: type: integer description: The minimum spending amount required for the charge, measured in cents and excluding any applicable taxes. It indicates the minimum amount that needs to be charged for each billing period. example: 0 properties: allOf: - $ref: '#/components/schemas/ChargeProperties' - description: List of all thresholds utilized for calculating the charge. filters: type: array description: List of filters used to apply differentiated pricing based on additional event properties. items: $ref: '#/components/schemas/ChargeFilterInput' tax_codes: type: array items: type: string description: List of unique code used to identify the taxes. example: - french_standard_vat usage_thresholds: type: array description: List of usage thresholds applied to the subscription. items: $ref: '#/components/schemas/UsageThresholdObject' TaxObject: type: object required: - lago_id - name - code - rate - applied_to_organization - customers_count - created_at properties: lago_id: type: string format: uuid description: Unique identifier of the tax, created by Lago. example: 1a901a90-1a90-1a90-1a90-1a901a901a90 name: type: string description: Name of the tax. example: TVA code: type: string description: Unique code used to identify the tax associated with the API request. example: french_standard_vat description: type: string description: Internal description of the taxe example: French standard VAT rate: type: number description: The percentage rate of the tax example: 20 applied_to_organization: type: boolean description: Set to `true` if the tax is used as one of the organization's default example: true add_ons_count: type: integer description: Number of add-ons this tax is applied to. example: 0 charges_count: type: integer description: Number of charges this tax is applied to. example: 0 customers_count: type: integer description: Number of customers this tax is applied to (directly or via the organization's default). example: 0 plans_count: type: integer description: Number of plans this tax is applied to. example: 0 created_at: type: string format: date-time description: Creation date of the tax. example: '2023-07-06T14:35:58Z' responses: BadRequest: description: Bad Request error content: application/json: schema: $ref: '#/components/schemas/ApiErrorBadRequest' NotFound: description: Not Found error content: application/json: schema: $ref: '#/components/schemas/ApiErrorNotFound' UnprocessableEntity: description: Unprocessable entity error content: application/json: schema: $ref: '#/components/schemas/ApiErrorUnprocessableEntity' NotAllowed: description: Not Allowed error content: application/json: schema: $ref: '#/components/schemas/ApiErrorNotAllowed' Unauthorized: description: Unauthorized error content: application/json: schema: $ref: '#/components/schemas/ApiErrorUnauthorized' parameters: page: name: page in: query description: Page number. required: false explode: true schema: type: integer example: 1 per_page: name: per_page in: query description: Number of records per page. required: false explode: true schema: type: integer example: 20 securitySchemes: bearerAuth: type: http scheme: bearer externalDocs: description: Lago Github url: https://github.com/getlago