Skip to main content
POST
/
subscriptions
/
{id}
/
changes
Apply changes to a subscription
curl --request POST \
  --url https://api.alguna.io/subscriptions/{id}/changes \
  --header 'Alguna-Version: <alguna-version>' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "add": [
    {
      "bundle_id": "bun_abc123",
      "items": [
        {
          "new_price": {
            "billing_direction": "arrears",
            "billing_interval": "monthly",
            "fee_type": "fixed",
            "type": "fixed",
            "billing_frequency": "recurring",
            "charge_on_contract_start": false,
            "display_order": 1,
            "metric_ids": [
              "<string>"
            ],
            "trial_period_days": 30
          },
          "product_id": "prod_abc123"
        }
      ],
      "product_id": "prod_abc123"
    }
  ],
  "description": "Q3 upgrade",
  "draft": false,
  "effective": "next_billing_period",
  "plan_id": "pln_abc123",
  "remove": [
    {
      "bundle_id": "bun_abc123",
      "product_id": "prod_abc123"
    }
  ],
  "source_version_id": "subv_abc123",
  "update": [
    {
      "add_items": [
        {
          "new_price": {
            "billing_direction": "arrears",
            "billing_interval": "monthly",
            "fee_type": "fixed",
            "type": "fixed",
            "billing_frequency": "recurring",
            "charge_on_contract_start": false,
            "display_order": 1,
            "metric_ids": [
              "<string>"
            ],
            "trial_period_days": 30
          },
          "product_id": "prod_abc123"
        }
      ],
      "adjust": {
        "billing_direction": "arrears",
        "billing_frequency": "recurring",
        "billing_interval": "monthly",
        "charge_on_contract_start": false,
        "display_order": 1,
        "expression_pricing_model": {
          "charges": [
            {
              "billing_direction": "arrears",
              "description": "API usage charge",
              "quantity_expression": "usage.api_calls",
              "unit_price_expression": "0.01"
            }
          ]
        },
        "fee_type": "fixed",
        "fixed_pricing_model": {
          "price_per_unit": "500.00",
          "units": 1
        },
        "graduated_percentage_pricing_model": {
          "tiers": [
            {
              "min_units": 0,
              "fixed_fee": "10.00",
              "max_units": 10000,
              "percentage": "2.5"
            }
          ]
        },
        "graduated_tiered_pricing_model": {
          "tiers": [
            {
              "min_units": 0,
              "fixed_fee": "10.00",
              "max_units": 10000,
              "price_per_unit": "0.02"
            }
          ],
          "units": 10
        },
        "metric_ids": [
          "<string>"
        ],
        "prepaid_fixed_tiered_pricing_model": {
          "overages_charge_interval": "monthly",
          "prepaid_units": 50000,
          "tiers": [
            {
              "min_units": 0,
              "fixed_fee": "10.00",
              "max_units": 10000,
              "price_per_unit": "0.02"
            }
          ]
        },
        "prepaid_tiered_pricing_model": {
          "prepaid_units": 50000,
          "tiers": [
            {
              "min_units": 0,
              "fixed_fee": "10.00",
              "max_units": 10000,
              "price_per_unit": "0.02"
            }
          ]
        },
        "tiered_percentage_pricing_model": {
          "tiers": [
            {
              "min_units": 0,
              "fixed_fee": "10.00",
              "max_units": 10000,
              "percentage": "2.5"
            }
          ]
        },
        "tiered_pricing_model": {
          "tiers": [
            {
              "min_units": 0,
              "fixed_fee": "10.00",
              "max_units": 10000,
              "price_per_unit": "0.02"
            }
          ],
          "units": 10
        },
        "trial_period_days": 30,
        "unit_pricing_model": {
          "price_per_unit": "0.05"
        },
        "volume_percentage_pricing_model": {
          "fixed_fee": "5.00",
          "percentage": "2.0",
          "price_per_unit": "0.05"
        }
      },
      "bundle_id": "bun_abc123",
      "items": [
        {
          "product_id": "prod_abc123",
          "adjust": {
            "billing_direction": "arrears",
            "billing_frequency": "recurring",
            "billing_interval": "monthly",
            "charge_on_contract_start": false,
            "display_order": 1,
            "expression_pricing_model": {
              "charges": [
                {
                  "billing_direction": "arrears",
                  "description": "API usage charge",
                  "quantity_expression": "usage.api_calls",
                  "unit_price_expression": "0.01"
                }
              ]
            },
            "fee_type": "fixed",
            "fixed_pricing_model": {
              "price_per_unit": "500.00",
              "units": 1
            },
            "graduated_percentage_pricing_model": {
              "tiers": [
                {
                  "min_units": 0,
                  "fixed_fee": "10.00",
                  "max_units": 10000,
                  "percentage": "2.5"
                }
              ]
            },
            "graduated_tiered_pricing_model": {
              "tiers": [
                {
                  "min_units": 0,
                  "fixed_fee": "10.00",
                  "max_units": 10000,
                  "price_per_unit": "0.02"
                }
              ],
              "units": 10
            },
            "metric_ids": [
              "<string>"
            ],
            "prepaid_fixed_tiered_pricing_model": {
              "overages_charge_interval": "monthly",
              "prepaid_units": 50000,
              "tiers": [
                {
                  "min_units": 0,
                  "fixed_fee": "10.00",
                  "max_units": 10000,
                  "price_per_unit": "0.02"
                }
              ]
            },
            "prepaid_tiered_pricing_model": {
              "prepaid_units": 50000,
              "tiers": [
                {
                  "min_units": 0,
                  "fixed_fee": "10.00",
                  "max_units": 10000,
                  "price_per_unit": "0.02"
                }
              ]
            },
            "tiered_percentage_pricing_model": {
              "tiers": [
                {
                  "min_units": 0,
                  "fixed_fee": "10.00",
                  "max_units": 10000,
                  "percentage": "2.5"
                }
              ]
            },
            "tiered_pricing_model": {
              "tiers": [
                {
                  "min_units": 0,
                  "fixed_fee": "10.00",
                  "max_units": 10000,
                  "price_per_unit": "0.02"
                }
              ],
              "units": 10
            },
            "trial_period_days": 30,
            "unit_pricing_model": {
              "price_per_unit": "0.05"
            },
            "volume_percentage_pricing_model": {
              "fixed_fee": "5.00",
              "percentage": "2.0",
              "price_per_unit": "0.05"
            }
          }
        }
      ],
      "product_id": "prod_abc123",
      "remove_items": [
        {
          "product_id": "prod_abc123"
        }
      ]
    }
  ]
}
'
{
  "changes_applied": {
    "added": [
      {
        "bundle_id": "bun_abc123",
        "product_id": "prod_abc123"
      }
    ],
    "removed": [
      {
        "bundle_id": "bun_abc123",
        "product_id": "prod_abc123"
      }
    ],
    "updated": [
      {
        "bundle_id": "bun_abc123",
        "product_id": "prod_abc123"
      }
    ]
  },
  "is_new_version": true,
  "source_version_id": "subv_abc123",
  "version_id": "subv_abc123",
  "version_status": "published",
  "effective_at": "2027-01-01T00:00:00Z",
  "end_date": "2027-06-01T00:00:00Z"
}

Documentation Index

Fetch the complete documentation index at: https://alguna.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

API key authentication. Pass your API key as a Bearer token.

Headers

Alguna-Version
enum<string>
required
Available options:
2026-04-01
Idempotency-Key
string

A unique string used to ensure the request is processed exactly once. If you retry a request with the same idempotency key within 24 hours, the original response is returned without re-executing the operation.

Maximum string length: 255
Example:

"ik_a1b2c3d4e5f6"

Path Parameters

id
string
required

Unique identifier for the subscription

Body

application/json
add
object[]

Products or bundles to add

description
string | null

Human-readable audit note

Example:

"Q3 upgrade"

draft
boolean | null

Create as draft (true) or auto-publish (false, default)

Example:

false

effective
string | null

When the change takes effect. One of: 'immediate' (now), 'next_term_renewal' (contract end), 'next_billing_period' (start of the next invoicing cycle), an ISO 8601 date (YYYY-MM-DD), or an RFC3339 timestamp (e.g. 2027-01-01T14:30:00Z).

Example:

"next_billing_period"

plan_id
string | null

Swap to a new plan (provides base item set)

Example:

"pln_abc123"

remove
object[]

Products or bundles to remove

source_version_id
string | null

Version to compute deltas against (default: current active)

Example:

"subv_abc123"

update
object[]

Products or bundles to modify

Response

Success

changes_applied
object
required

Summary of changes applied

is_new_version
boolean
required

Whether a new version was created (false = draft replaced)

Example:

true

source_version_id
string
required

Version the delta was computed against

Example:

"subv_abc123"

version_id
string
required

Created or replaced version ID

Example:

"subv_abc123"

version_status
enum<string>
required

Version status

Available options:
draft,
published
Example:

"published"

effective_at
string<date-time> | null

When the change takes effect

Example:

"2027-01-01T00:00:00Z"

end_date
string<date-time> | null

When this version ends, if superseded by a later version. Callers should verify this matches expectations when inserting between existing versions.

Example:

"2027-06-01T00:00:00Z"