chore: merge with dev

Co-authored-by: TheUntraceable <73362400+TheUntraceable@users.noreply.github.com>
This commit is contained in:
Charlie Lamb
2026-05-20 15:52:17 +01:00
279 changed files with 10147 additions and 3509 deletions

View File

@@ -3,9 +3,9 @@ title: "Attach"
openapi: "openapi POST /v1/billing.attach"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
The attach endpoint subscribes a customer to a plan. It handles new

View File

@@ -3,9 +3,9 @@ title: "Update Subscription"
openapi: "openapi POST /v1/billing.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
The update endpoint modifies an existing subscription. Use this to change prepaid quantities, cancel subscriptions, or modify plan configuration. For subscribing to a new plan, use [attach](/api-reference/billing/attach) instead.

View File

@@ -3,6 +3,6 @@ title: "Create Schedule"
openapi: "openapi POST /v1/billing.create_schedule"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";

View File

@@ -3,9 +3,9 @@ title: "Update Subscription"
openapi: "openapi POST /v1/billing.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
The update endpoint modifies an existing subscription. Use this to change prepaid quantities, cancel subscriptions, or modify plan configuration. For subscribing to a new plan, use [attach](/api-reference/billing/attach) instead.

View File

@@ -3,9 +3,9 @@ title: "Check Permissions"
openapi: "openapi POST /v1/balances.check"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
Check determines if a customer has access to a feature based on their current balance. Returns `allowed: true` if they have sufficient balance, the feature is unlimited, or it's a boolean feature included in their plan.

View File

@@ -3,9 +3,9 @@ title: "Track Usage"
openapi: "openapi POST /v1/balances.track"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
Track records usage events to decrement a customer's balance. Use this to meter feature consumption like API calls, messages sent, or credits used.

View File

@@ -3,9 +3,9 @@ title: "Get or Create Customer"
openapi: "openapi POST /v1/customers.get_or_create"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
If the customer already exists and you try to create it again, you will simply be returned the customer object (rather than an error being thrown).

View File

@@ -3,9 +3,9 @@ title: "Aggregate Events"
openapi: "openapi POST /v1/events.aggregate"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Aggregate usage events by time period. Returns usage totals grouped by feature and optionally by a custom property.

View File

@@ -3,9 +3,9 @@ title: "Create a plan"
openapi: "openapi POST /v1/plans.create"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Creates a new plan with optional base price and feature configurations. See [How plans work](/documentation/concepts/plans) for concepts and [Adding features to plans](/documentation/concepts/plan-items) for item configuration.

View File

@@ -3,9 +3,9 @@ title: "Delete a plan"
openapi: "openapi POST /v1/plans.delete"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Deletes a plan or a specific version of a plan.

View File

@@ -3,9 +3,9 @@ title: "Get a plan"
openapi: "openapi POST /v1/plans.get"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Retrieves a single plan by its ID. Returns the latest version by default.

View File

@@ -3,9 +3,9 @@ title: "List all plans"
openapi: "openapi POST /v1/plans.list"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Lists all plans in the current environment.

View File

@@ -3,9 +3,9 @@ title: "Update a plan"
openapi: "openapi POST /v1/plans.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Updates an existing plan. By default, creates a new version of the plan. See [Adding features to plans](/documentation/concepts/plan-items) for item configuration.

View File

@@ -3,9 +3,9 @@ title: "Check Permissions"
openapi: "openapi POST /v1/balances.check"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
Check determines if a customer has access to a feature based on their current balance. Returns `allowed: true` if they have sufficient balance, the feature is unlimited, or it's a boolean feature included in their plan.

View File

@@ -3,9 +3,9 @@ title: "Create Balance"
openapi: "openapi POST /v1/balances.create"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Delete Balance"
openapi: "openapi POST /v1/balances.delete"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Finalize Lock"
openapi: "openapi POST /v1/balances.finalize"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Track Usage"
openapi: "openapi POST /v1/balances.track"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
Track records usage events to decrement a customer's balance. Use this to meter feature consumption like API calls, messages sent, or credits used.

View File

@@ -3,9 +3,9 @@ title: "Update Balance"
openapi: "openapi POST /v1/balances.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Attach"
openapi: "openapi POST /v1/billing.attach"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
The attach endpoint subscribes a customer to a plan. It handles new

View File

@@ -3,9 +3,9 @@ title: "Update Subscription"
openapi: "openapi POST /v1/billing.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
The update endpoint modifies an existing subscription. Use this to change prepaid quantities, cancel subscriptions, or modify plan configuration. For subscribing to a new plan, use [attach](/api-reference/billing/attach) instead.

View File

@@ -3,9 +3,9 @@ title: "Create Schedule"
openapi: "openapi POST /v1/billing.create_schedule"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Multi Attach"
openapi: "openapi POST /v1/billing.multi_attach"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Open Customer Portal"
openapi: "openapi POST /v1/billing.open_customer_portal"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Preview Attach"
openapi: "openapi POST /v1/billing.preview_attach"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Preview Multi Attach"
openapi: "openapi POST /v1/billing.preview_multi_attach"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Preview Update"
openapi: "openapi POST /v1/billing.preview_update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Setup Payment"
openapi: "openapi POST /v1/billing.setup_payment"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Check Permissions"
openapi: "openapi POST /v1/balances.check"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
Check determines if a customer has access to a feature based on their current balance. Returns `allowed: true` if they have sufficient balance, the feature is unlimited, or it's a boolean feature included in their plan.

View File

@@ -3,9 +3,9 @@ title: "Track Usage"
openapi: "openapi POST /v1/balances.track"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
Track records usage events to decrement a customer's balance. Use this to meter feature consumption like API calls, messages sent, or credits used.

View File

@@ -3,9 +3,9 @@ title: "Delete Customer"
openapi: "openapi POST /v1/customers.delete"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Get Customer"
openapi: "openapi POST /v1/customers.get"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Get or Create Customer"
openapi: "openapi POST /v1/customers.get_or_create"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
<Note>
If the customer already exists and you try to create it again, you will simply be returned the customer object (rather than an error being thrown).

View File

@@ -3,18 +3,18 @@ title: "List Customers"
openapi: "openapi POST /v1/customers.list"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters
<DynamicParamField body="offset" type="integer">
Number of items to skip
<DynamicParamField body="start_cursor" type="string">
Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
</DynamicParamField>
<DynamicParamField body="limit" type="integer">
Number of items to return. Default 10, max 1000.
Number of items to return. Default 50, hard ceiling 5000.
</DynamicParamField>
<DynamicParamField body="plans" type="object[]">
@@ -28,22 +28,22 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
</DynamicParamField>
<DynamicParamField body="subscription_status" type="'active' | 'scheduled'">
Filter by customer product status. Defaults to active and scheduled
Filter by customer product status. Defaults to active and scheduled.
</DynamicParamField>
<DynamicParamField body="search" type="string">
Search customers by id, name, or email
Search customers by id, name, or email.
</DynamicParamField>
<DynamicParamField body="processors" type="('stripe' | 'revenuecat' | 'vercel')[]">
Filter by customer processor type (stripe, revenuecat, vercel)
Filter by customer processor type (stripe, revenuecat, vercel).
</DynamicParamField>
### Response
<DynamicResponseField name="list" type="object[]">
Array of items for current page
Items for current page.
<Expandable title="properties">
<DynamicResponseField name="id" type="string | null">
Your unique identifier for the customer.
@@ -1184,28 +1184,8 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
</Expandable>
</DynamicResponseField>
<DynamicResponseField name="has_more" type="boolean">
Whether more results exist after this page
</DynamicResponseField>
<DynamicResponseField name="offset" type="number">
Current offset position
</DynamicResponseField>
<DynamicResponseField name="limit" type="number">
Limit passed in the request
</DynamicResponseField>
<DynamicResponseField name="total" type="number">
Total number of items returned in the current page
</DynamicResponseField>
<DynamicResponseField name="total_count" type="number">
Total number of customers available in the current organization and environment
</DynamicResponseField>
<DynamicResponseField name="total_filtered_count" type="number">
Total number of customers matching the current filter before pagination is applied
<DynamicResponseField name="next_cursor" type="string | null">
Opaque cursor for the next page. Null when there are no more results.
</DynamicResponseField>
@@ -1290,12 +1270,7 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
}
}
],
"has_more": false,
"offset": 0,
"total": 1,
"limit": 10,
"total_count": 100,
"total_filtered_count": 42
"next_cursor": null
}
```
</ResponseExample>

View File

@@ -3,9 +3,9 @@ title: "Update Customer"
openapi: "openapi POST /v1/customers.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Create Entity"
openapi: "openapi POST /v1/entities.create"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Delete Entity"
openapi: "openapi POST /v1/entities.delete"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Get Entity"
openapi: "openapi POST /v1/entities.get"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,18 +3,18 @@ title: "List Entities"
openapi: "openapi POST /v1/entities.list"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters
<DynamicParamField body="offset" type="integer">
Number of items to skip
<DynamicParamField body="start_cursor" type="string">
Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
</DynamicParamField>
<DynamicParamField body="limit" type="integer">
Number of items to return. Default 10, max 1000.
Number of items to return. Default 50, hard ceiling 5000.
</DynamicParamField>
<DynamicParamField body="plans" type="object[]">
@@ -43,7 +43,7 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
### Response
<DynamicResponseField name="list" type="object[]">
Array of items for current page
Items for current page.
<Expandable title="properties">
<DynamicResponseField name="id" type="string | null">
The unique identifier of the entity
@@ -1112,28 +1112,8 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
</Expandable>
</DynamicResponseField>
<DynamicResponseField name="has_more" type="boolean">
Whether more results exist after this page
</DynamicResponseField>
<DynamicResponseField name="offset" type="number">
Current offset position
</DynamicResponseField>
<DynamicResponseField name="limit" type="number">
Limit passed in the request
</DynamicResponseField>
<DynamicResponseField name="total" type="number">
Total number of items returned in the current page
</DynamicResponseField>
<DynamicResponseField name="total_count" type="number">
Total number of entities available in the current organization and environment
</DynamicResponseField>
<DynamicResponseField name="total_filtered_count" type="number">
Total number of entities matching the current filter before pagination is applied
<DynamicResponseField name="next_cursor" type="string | null">
Opaque cursor for the next page. Null when there are no more results.
</DynamicResponseField>
@@ -1197,12 +1177,7 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
"invoices": []
}
],
"has_more": false,
"offset": 0,
"total": 1,
"limit": 10,
"total_count": 100,
"total_filtered_count": 42
"next_cursor": null
}
```
</ResponseExample>

View File

@@ -3,9 +3,9 @@ title: "Update Entity"
openapi: "openapi POST /v1/entities.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Aggregate Events"
openapi: "openapi POST /v1/events.aggregate"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Aggregate usage events by time period. Returns usage totals grouped by feature and optionally by a custom property.

View File

@@ -3,18 +3,18 @@ title: "List Events"
openapi: "openapi POST /v1/events.list"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters
<DynamicParamField body="offset" type="integer">
Number of items to skip
<DynamicParamField body="start_cursor" type="string">
Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
</DynamicParamField>
<DynamicParamField body="limit" type="integer">
Number of items to return. Default 100, max 1000.
Number of items to return. Default 50, hard ceiling 5000.
</DynamicParamField>
<DynamicParamField body="customer_id" type="string">
@@ -47,7 +47,7 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
### Response
<DynamicResponseField name="list" type="object[]">
Array of items for current page
Items for current page.
<Expandable title="properties">
<DynamicResponseField name="id" type="string">
Event ID (KSUID)
@@ -116,20 +116,8 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
</Expandable>
</DynamicResponseField>
<DynamicResponseField name="has_more" type="boolean">
Whether more results exist after this page
</DynamicResponseField>
<DynamicResponseField name="offset" type="number">
Current offset position
</DynamicResponseField>
<DynamicResponseField name="limit" type="number">
Limit passed in the request
</DynamicResponseField>
<DynamicResponseField name="total" type="number">
Total number of items returned in the current page
<DynamicResponseField name="next_cursor" type="string | null">
Opaque cursor for the next page. Null when there are no more results.
</DynamicResponseField>
@@ -167,10 +155,7 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
"deductions": null
}
],
"total": 2,
"has_more": false,
"offset": 0,
"limit": 100
"next_cursor": "eyJ2IjowLCJpZCI6ImV2dF8zNnhtSHh4akFrcXh1ZkRmOXlIQVBOZlJyTE0iLCJ0IjoxNzY1OTU2NTEyMDU3fQ"
}
```
</ResponseExample>

View File

@@ -3,9 +3,9 @@ title: "Create Feature"
openapi: "openapi POST /v1/features.create"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Delete Feature"
openapi: "openapi POST /v1/features.delete"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Get Feature"
openapi: "openapi POST /v1/features.get"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "List Features"
openapi: "openapi POST /v1/features.list"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Response

View File

@@ -3,9 +3,9 @@ title: "Update Feature"
openapi: "openapi POST /v1/features.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Create a plan"
openapi: "openapi POST /v1/plans.create"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Creates a new plan with optional base price and feature configurations. See [How plans work](/documentation/concepts/plans) for concepts and [Adding features to plans](/documentation/concepts/plan-items) for item configuration.

View File

@@ -3,9 +3,9 @@ title: "Delete a plan"
openapi: "openapi POST /v1/plans.delete"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Deletes a plan or a specific version of a plan.

View File

@@ -3,9 +3,9 @@ title: "Get a plan"
openapi: "openapi POST /v1/plans.get"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Retrieves a single plan by its ID. Returns the latest version by default.

View File

@@ -3,9 +3,9 @@ title: "List all plans"
openapi: "openapi POST /v1/plans.list"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Lists all plans in the current environment.

View File

@@ -3,9 +3,9 @@ title: "Update a plan"
openapi: "openapi POST /v1/plans.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
Updates an existing plan. By default, creates a new version of the plan. See [Adding features to plans](/documentation/concepts/plan-items) for item configuration.

View File

@@ -3,9 +3,9 @@ title: "Create Referral Code"
openapi: "openapi POST /v1/referrals.create_code"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Redeem Referral Code"
openapi: "openapi POST /v1/referrals.redeem_code"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -0,0 +1,108 @@
---
title: "Plans Updated"
openapi: "api/openapi.yml webhook billing.updated"
---
### Payload Fields
<ParamField body="object" type="string" required />
<ParamField body="customer_id" type="string" required>
The ID of the customer whose plans changed.
</ParamField>
<ParamField body="entity_id" type="string | null">
The ID of the entity, if the changes are scoped to a specific entity.
</ParamField>
<ParamField body="plan_changes" type="object[]" required>
The plans that were activated, scheduled, updated, or expired.
<Expandable title="properties">
<ParamField body="action" type="'activated' | 'scheduled' | 'updated' | 'expired'" required>
The lifecycle action applied to this plan: activated (newly active on the customer), scheduled (queued for a future start), updated (mutated in place), or expired (ended).
</ParamField>
<ParamField body="subscription" type="object">
The subscription as it stands after this change. Present when the plan is billed as a recurring subscription.
<Expandable title="properties">
<ParamField body="plan_id" type="string" required>
The ID of the customer plan.
</ParamField>
<ParamField body="status" type="'active' | 'scheduled' | 'expired'" required>
The current status of the subscription on the customer.
</ParamField>
<ParamField body="past_due" type="boolean" required>
Whether the subscription has overdue payments.
</ParamField>
<ParamField body="started_at" type="number | null" required>
When the subscription started, in milliseconds since the Unix epoch.
</ParamField>
<ParamField body="canceled_at" type="number | null" required>
When the subscription was canceled, in milliseconds since the Unix epoch, or null if not canceled.
</ParamField>
<ParamField body="expires_at" type="number | null" required>
When the subscription ends, in milliseconds since the Unix epoch, or null if no expiry is set.
</ParamField>
<ParamField body="trial_ends_at" type="number | null" required>
When the trial ends, in milliseconds since the Unix epoch. Null when not actively trialing.
</ParamField>
<ParamField body="current_period_start" type="number | null" required>
Start of the current billing period, or null if not applicable.
</ParamField>
<ParamField body="current_period_end" type="number | null" required>
End of the current billing period, or null if not applicable.
</ParamField>
</Expandable>
</ParamField>
<ParamField body="purchase" type="object">
The purchase as it stands after this change. Present when the plan is a one-off purchase.
<Expandable title="properties">
<ParamField body="plan_id" type="string" required>
The ID of the customer plan.
</ParamField>
<ParamField body="status" type="'active' | 'scheduled' | 'expired'" required>
The current status of the purchase on the customer.
</ParamField>
<ParamField body="expires_at" type="number | null" required>
When the purchase ends, in milliseconds since the Unix epoch, or null if no expiry is set.
</ParamField>
</Expandable>
</ParamField>
<ParamField body="previous_attributes" type="object | null" required>
Sparse map of scalar fields whose values changed, holding their previous values. Null when the plan is newly activated or scheduled.
</ParamField>
<ParamField body="item_changes" type="object[]" required>
Features that were added to or removed from this plan. Only populated for updated plans.
<Expandable title="properties">
<ParamField body="action" type="'created' | 'deleted'" required>
Whether the feature was added to or removed from the plan.
</ParamField>
<ParamField body="feature_id" type="string" required>
The ID of the feature that was added or removed.
</ParamField>
</Expandable>
</ParamField>
</Expandable>
</ParamField>
<ParamField body="tags" type="string[]" required>
Reason tags describing why this event fired (e.g. 'trial_ended', 'phase_changed'). Always present; empty when no specific reason applies.
</ParamField>

View File

@@ -3,9 +3,9 @@ title: "Attach"
openapi: "openapi POST /v1/attach"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Delete Customer"
openapi: "openapi POST /v1/customers.delete"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Get Or Create"
openapi: "openapi POST /v1/customers.getOrCreate"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Get Or Create Customer"
openapi: "openapi POST /v1/customers.getOrCreate"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "List Customers"
openapi: "openapi POST /v1/customers.list"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "Update Customer"
openapi: "openapi POST /v1/customers.update"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Body Parameters

View File

@@ -3,9 +3,9 @@ title: "List Plans"
openapi: "openapi GET /v1/products"
---
import { DynamicParamField } from "/components/dynamic-param-field.jsx";
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
import { DynamicParamField } from "/snippets/dynamic-param-field.jsx";
import { DynamicResponseField } from "/snippets/dynamic-response-field.jsx";
import { DynamicResponseExample } from "/snippets/dynamic-response-example.jsx";
### Response

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,91 @@ mode: "center"
description: "Some new things we've shipped at Autumn HQ"
---
<Update label="May 7th 2026">
## Scheduled subscriptions with `starts_at`
You can now schedule a plan to start at a future date by passing a `starts_at` Unix timestamp (milliseconds) to `billing.attach`. Future-dated attaches create a Stripe subscription schedule that activates on the start date — perfect for delayed onboarding, contract renewals, or sales-led handoffs.
Pair `starts_at` with `ends_at` to grant access for a fixed window. One-off products now also support `ends_at` and are automatically cleaned up when the window expires.
See the [attach API reference](/api-reference/billing/attach).
## Auto top-up succeeded webhook
A new **`billing.auto_topup_succeeded`** webhook fires whenever an auto top-up is processed for a customer. The payload includes the customer ID, feature ID, quantity granted, threshold that triggered the top-up, post-top-up balance, and the full Stripe invoice (status, total, currency, hosted URL, and PDF link).
Useful for sending receipts, syncing top-ups to your own ledger, or alerting customers that their card was charged. Supports both auto-charged and `send_invoice` modes.
See the [auto top-up webhook reference](/api-reference/webhooks/billingAutoTopupSucceeded) and the [auto top-ups guide](/documentation/modelling-pricing/auto-top-ups).
## Promo codes in Autumn Checkout
Customers can now apply promo codes directly in Autumn Checkout. The order summary surfaces a collapsed promo trigger that expands into an input — applied codes show their discount and expiry inline, and the totals update before confirmation.
## Discounts and coupons in subscription updates
The dashboard's subscription update flow now supports applying discounts. Existing coupons are visible in the subscription detail sheet, and you can attach a discount when changing a plan or quantities.
## Tax and invoice credits in attach preview
`billing.preview_attach` now returns two new optional fields:
- **`tax`**: Tax breakdown for the immediate charge (total, inclusive/exclusive amounts, currency, calculation status). Powered by Stripe Tax — contact us to enable the tax flag on your organisation.
- **`invoice_credits`**: The customer's available Stripe invoice credit balance, so you can show "Account credit" line items in custom checkouts.
See the [preview attach reference](/api-reference/billing/previewAttach).
## `balances` field in `track` responses
The `/track` endpoint now returns the affected feature balances — including a per-plan `breakdown` of grants, prepaid credits, usage, remaining, and rollovers — directly in the response. This removes the need for a follow-up `check` call after recording usage.
See the [track endpoint](/api-reference/core/track).
## `processors` field on customer responses
Customer endpoints (`get`, `getOrCreate`, `update`, `list`) now return a `processors` object listing every payment processor the customer is connected to: Stripe, Vercel, and RevenueCat. The field is omitted for customers not yet present in any processor.
You can also filter `customers.list` by processor with the new `processors` query parameter.
## Auto top-up purchase limits in customer expand
Expand `billing_controls.auto_topups.purchase_limit` on customer endpoints to retrieve the configured top-up rate limit, the current count of top-ups in the period, and the next reset timestamp. Useful for showing customers how close they are to their auto top-up cap.
## RevenueCat invoice sync
RevenueCat-billed subscriptions now record full invoices on initial purchase, renewal, and refund events. Invoices appear alongside Stripe invoices in customer responses and the dashboard, giving you a unified view of revenue across processors.
<AccordionGroup>
<Accordion title="Improvements">
- `starts_at` parameter on `billing.attach` for scheduled subscription start dates - [#1411](https://github.com/useautumn/autumn/pull/1411), [#1467](https://github.com/useautumn/autumn/pull/1467), [#1476](https://github.com/useautumn/autumn/pull/1476)
- `ends_at` on one-off products with automatic expiry cron - [#1476](https://github.com/useautumn/autumn/pull/1476)
- `billing.auto_topup_succeeded` webhook - [#1429](https://github.com/useautumn/autumn/pull/1429)
- Promo code support in Autumn Checkout - [#1446](https://github.com/useautumn/autumn/pull/1446)
- Discount support on subscription updates and coupon display in subscription detail - [#1463](https://github.com/useautumn/autumn/pull/1463)
- Tax preview in `billing.preview_attach` - [#1417](https://github.com/useautumn/autumn/pull/1417), [#1424](https://github.com/useautumn/autumn/pull/1424)
- Invoice credits preview in `billing.preview_attach` - [#1464](https://github.com/useautumn/autumn/pull/1464)
- `balances` field returned in `/track` responses - [#1470](https://github.com/useautumn/autumn/pull/1470)
- `processors` field and `processors` filter on customer endpoints - [#1490](https://github.com/useautumn/autumn/pull/1490)
- `billing_controls.auto_topups.purchase_limit` expand on customer endpoints - [#1423](https://github.com/useautumn/autumn/pull/1423)
- RevenueCat invoice recording on initial purchase, renewal, and refund - [#1490](https://github.com/useautumn/autumn/pull/1490)
- OpenAPI spec, SDKs, and dashboard updated with `starts_at` / `ends_at` fields - [#1485](https://github.com/useautumn/autumn/pull/1485)
- Checkout `enable_immediately` flow improvements - [#1415](https://github.com/useautumn/autumn/pull/1415)
- API key sheet and table UI cleanup
</Accordion>
<Accordion title="Bug fixes">
- Proration settings now visible during cross-entity free-to-paid attach - [#1491](https://github.com/useautumn/autumn/pull/1491)
- Dashboard org switcher now lists the full set of organizations - [#1475](https://github.com/useautumn/autumn/pull/1475)
- Balance validation no longer rejects valid edits - [#1477](https://github.com/useautumn/autumn/pull/1477)
- Schedule sync edge cases fixed - [#1443](https://github.com/useautumn/autumn/pull/1443)
- Orphaned customer products cleaned up correctly - [#1440](https://github.com/useautumn/autumn/pull/1440)
- Auto-sync paid feature mapping on plan edits - [#1448](https://github.com/useautumn/autumn/pull/1448)
- Member toolbar z-index fixed in the dashboard - [#1449](https://github.com/useautumn/autumn/pull/1449)
- Prepaid price v2 fixes - [#1451](https://github.com/useautumn/autumn/pull/1451)
- Vercel customer filtering when no Stripe is connected - [#1455](https://github.com/useautumn/autumn/pull/1455), [#1458](https://github.com/useautumn/autumn/pull/1458)
</Accordion>
</AccordionGroup>
</Update>
<Update label="March 23rd 2026">
## Usage alerts and `balances.limit_reached` webhook

View File

@@ -280,7 +280,8 @@
{
"group": "Billing",
"pages": [
"api-reference/webhooks/billingAutoTopupSucceeded"
"api-reference/webhooks/billingAutoTopupSucceeded",
"api-reference/webhooks/billingUpdated"
]
},
{

View File

@@ -1,5 +1,3 @@
import { useEffect, useMemo, useState } from "react";
/**
* A wrapper around Mintlify's ParamField that dynamically switches
* between snake_case and camelCase based on the selected code language.

View File

@@ -1,5 +1,3 @@
import { useEffect, useMemo, useState } from "react";
/**
* A dynamic response example that shows JSON in the sidebar.
* Displays two tabs (TypeScript/Response) and auto-switches based on selected language.

View File

@@ -1,5 +1,3 @@
import { useEffect, useMemo, useState } from "react";
/**
* A wrapper around Mintlify's ResponseField that dynamically switches
* between snake_case and camelCase based on the selected code language.

View File

@@ -3,7 +3,7 @@
"private": true,
"scripts": {
"pull": "bun scripts/pull.ts",
"dev": "cd mintlify && bun x mint dev --port 3003",
"dev": "cd mintlify && bun x --bun mint dev --port 3003",
"build": "cd mintlify && mint build",
"start": "cd mintlify && mint dev"
},

View File

@@ -1200,11 +1200,17 @@ export const faqData = [
answer:
"Yes. Autumn works with Stripe—it handles the billing logic that Stripe doesn't. You keep your Stripe account, your customer relationships, and your payment data. Autumn sits between your app and Stripe, managing webhooks, usage limits, and state.\n\nYou're never locked in. Your subscriptions live in Stripe.",
},
{
id: 7,
question: "Do I need to call Autumn before every action?",
answer:
"For latency-sensitive operations, you may not want to make an `autumn.check()` network call before every action. \n\n Instead, you can either cache the Autumn customer data on your end, or use our single `customer.products.updated` webhook to replicate the Autumn state into your own system.",
},
{
id: 2,
question: "What if Autumn goes down? Will my app go down?",
answer:
"We run on redundant infrastructure and high availability is our priority. However, not being able to reach Autumn does not mean that your app will go down. Our SDKs default to fail open and fail fast, meaning that in a worst case scenario, some users may get temporary additional access.\n\nWe can work with you to reconcile usage tracking and balances afterward if needed.",
"We run on redundant infrastructure and high availability is our priority. However, not being able to reach Autumn does not mean that your app will go down. Our app and SDKs default to fail open and fail fast, meaning that in a worst case scenario, some users may get temporary additional access.\n\nWe can work with you to reconcile usage tracking and balances afterward if needed.",
},
{
id: 3,
@@ -1216,11 +1222,11 @@ export const faqData = [
id: 4,
question: "What if I need to move off Autumn? Am I locked in?",
answer:
"Autumn is open source. You can self-host anytime, or export all your data. Your Stripe subscriptions, customers and payment details remain yours. Moving off Autumn is simply a case of building what you would have built in-house without Autumn (but this has never happened, touch wood!). ",
"Autumn is open source. You can self-host anytime, or export all your data. Your Stripe subscriptions, customers and payment details remain yours. Moving off Autumn is simply a case of building what you would have built in-house anyway (but this has never happened, touch wood!). \n\n You can even do this gradually: first by replicating customer state into your own system via our webhooks, then making a full transition after.",
},
{
id: 5,
question: "How long would it take to go live?",
question: "Can you do the implementation for us?",
answer:
"If you're setting up payments for the first time, most teams go live in under an hour. Migrating from an existing billing system typically takes 12 weeks, depending on complexity.\n\n For Series A+ companies, we provide a forward deployed service to work with your team, dual-write to your internal system and Autumn, then smoothly migrate over. Minimal work needed on your part.",
},
@@ -1230,67 +1236,61 @@ export const faqData = [
answer:
"Yes. Autumn supports 10,000+ events per second per end customer. We've processed millions of billing events daily for AI companies at scale. If you have specific requirements, reach out—we'll walk through our architecture.",
},
{
id: 7,
question: "What if I can't use `check()`?",
answer:
"Latency-sensitive customers may not be able to use `check()` in real-time. In these cases, you can cache the Autumn customer data on your end, or use our single `customer.products.updated` webhook to replicate the Autumn state into your own system.",
},
];
export const featuresData = [
{
title: "Usage Ledgers",
title: "Real-time balances",
description:
"Recurring, one-time and rollover credit balances. Stack balances across plans and topups. Deduct from soonest expiry first.",
Icon: IconWebhooks,
},
{
title: "Payment Logic",
description:
"Checkouts, upgrades, downgrades, add-ons, proration, 3DS, edge cases, webhooks: all handled in a single API call.",
Icon: IconWebhooks,
},
{
title: "Custom Plans",
description:
"Create one-off deals for enterprise customers. Unique pricing, features, and limits without touching code.",
Icon: IconPlans,
},
{
title: "Usage Analytics",
description:
"Fast timeseries charts and event logs out of the box. Powered by ClickHouse.",
Icon: IconAnalytics,
},
{
title: "Team Billing",
description:
"Grant plans and features to entities under an organization. Create pools of credits, or assign to users directly.",
Icon: IconTeam,
},
{
title: "Auto Top-ups",
description:
"Let users refill credits when balance runs low. Configure thresholds and amounts. Fully automated.",
Icon: IconTopUp,
},
{
title: "Pricing Versioning",
title: "Instant pricing changes",
description:
"Change your pricing model without breaking existing customers. Grandfather old plans or migrate users gradually. No database or Stripe migrations.",
Icon: IconVersioning,
},
{
title: "Alerts and Spend Limits",
title: "Custom contracts",
description:
"Create one-off deals for enterprise customers. Unique pricing, features, and limits without touching code.",
Icon: IconPlans,
},
{
title: "Usage history",
description:
"Fast timeseries charts and event logs out of the box. Powered by ClickHouse.",
Icon: IconAnalytics,
},
{
title: "Organization billing",
description:
"Grant plans and features to entities under an organization. Create pools of credits, or assign to users directly.",
Icon: IconTeam,
},
{
title: "Auto top-ups",
description:
"Let users refill credits when balance runs low. Configure thresholds and amounts. Fully automated.",
Icon: IconTopUp,
},
{
title: "Alerts and spend limits",
description:
"Give customers governance over their usage. Configure alerts, limits and overage per customer.",
Icon: IconReact,
},
{
title: "Coupons and Referrals",
title: "Payment logic",
description:
"Built-in referral system with rewards, tracking, and attribution. Launch referral programs in minutes.",
"Checkouts, upgrades, downgrades, add-ons, proration, 3DS, edge cases, webhooks: all handled in a single API call.",
Icon: IconWebhooks,
},
{
title: "Coupons and referrals",
description:
"Grant expiring coupon credit grants to customers. Launch referral programs in minutes.",
Icon: IconReferral,
},
];

View File

@@ -142,17 +142,19 @@ export default function Hero() {
<div className="flex flex-col gap-6 w-full px-0 lg:px-0">
<h1 className="hero-reveal lg:opacity-0 text-[44px] md:text-[56px] w-full max-w-sm sm:max-w-[480px] md:max-w-xl leading-[44px] tracking-[-5%] md:leading-14 font-sans">
<span className="text-[#FFFFFF99] font-normal">
Drop-in credits and billing for
The revenue runtime for
</span>{" "}
<span className="text-white block md:inline">AI agents</span>
<span className="text-white block md:inline"> AI companies</span>
</h1>
<p className="hero-reveal lg:opacity-0 tracking-[-2%] w-full max-w-xs sm:max-w-[480px] md:max-w-xl text-[#FFFFFF99] md:text-[16px] text-[14px] font-light leading-5 font-sans">
Stop rebuilding usage limits, credit ledgers and payment logic.{" "}
Your {" "}
<span className="text-white font-light">
Autumn is the customer database
real-time source of truth
</span>{" "}
that scales from your first user to your largest contract.
for usage-based, PLG and sales-led monetization. Replace your usage limits, credit ledger and Stripe billing logic
with a flexible control plane.
</p>
</div>
</div>
{/*

View File

@@ -36,18 +36,18 @@ export default function Problem() {
<div className="flex flex-col mb-2 gap-3 pl-[28px] xl:pl-[90px] pr-6 xl:pr-8 pt-14 sm:pt-16 xl:pt-16 items-center xl:items-start">
<h2 className="font-normal tracking-[-4%] leading-[32px] xl:leading-[40px] mb-2 xl:mb-4 text-center xl:text-left">
<span className="block text-[#686868] text-[30px] md:text-[36px] xl:text-[40px]">
Say goodbye to the
Say goodbye to your
</span>
<span className="block text-white text-[30px] md:text-[36px] xl:text-[40px]">
old way of billing.
vibecoded infra.
</span>
</h2>
<p className="text-[#888888] font-light text-[16px] md:text-[18px] xl:text-[16px] tracking-[-2%] leading-[20px] mb-8 xl:mb-10 max-w-sm md:max-w-lg xl:max-w-sm text-center xl:text-left">
Maintaining payment logic, customer balances and feature access
across pricing and product changes is months of work.
AI billing is harder than seat-based. Managing payments, balances and entitlements
across pricing and product changes becomes messy quickly.
<span className="text-white">
{" "}
Autumn replaces all the billing code you're building yourself.
Autumn decouples your billing logic from code.
</span>
</p>
</div>

View File

@@ -61,7 +61,7 @@ const cards = [
{
bg: "#A175FF",
icon: "/images/production/uptime2.svg",
metric: "1 Billion +",
metric: "> 5 billion",
label: "Monthly events",
description:
"Autumn handles billions of billing events monthly for some of your favorite apps.",
@@ -70,7 +70,7 @@ const cards = [
{
bg: "#FFE8FA",
icon: "/images/production/latency.svg",
metric: "<50ms",
metric: "< 50ms",
label: "US latency",
description:
"Every billing check resolves in under 50ms. Your users never wait for a gate.",

View File

@@ -48,14 +48,14 @@ export default function Solution() {
{/* Heading */}
<div className="text-center mb-16 lg:mb-4 flex flex-col items-center">
<h2 className="text-[30px] leading-[30px] md:text-[40px] md:leading-[40px] font-normal tracking-tight mb-6">
<span className="text-[#A3A3A3]">Replace it all with </span>
<span className="text-white">Autumn</span>
<span className="text-[#A3A3A3]">Your app's </span>
<span className="text-white">customer record</span>
</h2>
<p className="text-[#A3A3A3] text-[14px] md:text-[16px] sm:text-base max-w-2xl mx-auto font-light leading-[20px] tracking-[-2%]">
Autumn is a database purpose-built for billing state. Configure your
Autumn is a database purpose-built for real-time monetization. Configure your
pricing
<br className="hidden sm:block" />
in the dashboard.{" "}
in the dashboard or CLI.{" "}
<span className="text-white">
Three API calls handle everything else.
</span>

View File

@@ -19,6 +19,7 @@
"gray-matter": "^4.0.3",
"gsap": "^3.15.0",
"lottie-react": "^2.4.1",
"lottie-web": "^5.13.0",
"motion": "^12.38.0",
"next": "16.2.4",
"ngrok": "^5.0.0-beta.2",

View File

@@ -1,6 +1,6 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"configVersion": 0,
"workspaces": {
"": {
"name": "autumn",
@@ -19,7 +19,7 @@
},
"devDependencies": {
"@better-auth/cli": "^1.4.21",
"@biomejs/biome": "^2.2.7",
"@biomejs/biome": "2.2.2",
"@trigger.dev/build": "4.4.6",
"@types/node": "^24.9.1",
"concurrently": "^9.2.1",
@@ -122,6 +122,7 @@
"gray-matter": "^4.0.3",
"gsap": "^3.15.0",
"lottie-react": "^2.4.1",
"lottie-web": "^5.13.0",
"motion": "^12.38.0",
"next": "16.2.4",
"ngrok": "^5.0.0-beta.2",
@@ -937,23 +938,23 @@
"@better-fetch/fetch": ["@better-fetch/fetch@1.1.21", "", {}, "sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A=="],
"@biomejs/biome": ["@biomejs/biome@2.4.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.15", "@biomejs/cli-darwin-x64": "2.4.15", "@biomejs/cli-linux-arm64": "2.4.15", "@biomejs/cli-linux-arm64-musl": "2.4.15", "@biomejs/cli-linux-x64": "2.4.15", "@biomejs/cli-linux-x64-musl": "2.4.15", "@biomejs/cli-win32-arm64": "2.4.15", "@biomejs/cli-win32-x64": "2.4.15" }, "bin": { "biome": "bin/biome" } }, "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw=="],
"@biomejs/biome": ["@biomejs/biome@2.2.2", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.2", "@biomejs/cli-darwin-x64": "2.2.2", "@biomejs/cli-linux-arm64": "2.2.2", "@biomejs/cli-linux-arm64-musl": "2.2.2", "@biomejs/cli-linux-x64": "2.2.2", "@biomejs/cli-linux-x64-musl": "2.2.2", "@biomejs/cli-win32-arm64": "2.2.2", "@biomejs/cli-win32-x64": "2.2.2" }, "bin": { "biome": "bin/biome" } }, "sha512-j1omAiQWCkhuLgwpMKisNKnsM6W8Xtt1l0WZmqY/dFj8QPNkIoTvk4tSsi40FaAAkBE1PU0AFG2RWFBWenAn+w=="],
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg=="],
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.2.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-6ePfbCeCPryWu0CXlzsWNZgVz/kBEvHiPyNpmViSt6A2eoDf4kXs3YnwQPzGjy8oBgQulrHcLnJL0nkCh80mlQ=="],
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ=="],
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.2.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-Tn4JmVO+rXsbRslml7FvKaNrlgUeJot++FkvYIhl1OkslVCofAtS35MPlBMhXgKWF9RNr9cwHanrPTUUXcYGag=="],
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug=="],
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-JfrK3gdmWWTh2J5tq/rcWCOsImVyzUnOS2fkjhiYKCQ+v8PqM+du5cfB7G1kXas+7KQeKSWALv18iQqdtIMvzw=="],
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ=="],
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-/MhYg+Bd6renn6i1ylGFL5snYUn/Ct7zoGVKhxnro3bwekiZYE8Kl39BSb0MeuqM+72sThkQv4TnNubU9njQRw=="],
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g=="],
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Ogb+77edO5LEP/xbNicACOWVLt8mgC+E1wmpUakr+O4nKwLt9vXe74YNuT3T1dUBxC/SnrVmlzZFC7kQJEfquQ=="],
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w=="],
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-ZCLXcZvjZKSiRY/cFANKg+z6Fhsf9MHOzj+NrDQcM+LbqYRT97LyCLWy2AS+W2vP+i89RyRM+kbGpUzbRTYWig=="],
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w=="],
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.2.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-wBe2wItayw1zvtXysmHJQoQqXlTzHSpQRyPpJKiNIR21HzH/CrZRDFic1C1jDdp+zAPtqhNExa0owKMbNwW9cQ=="],
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.15", "", { "os": "win32", "cpu": "x64" }, "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ=="],
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.2.2", "", { "os": "win32", "cpu": "x64" }, "sha512-DAuHhHekGfiGb6lCcsT4UyxQmVwQiBCBUMwVra/dcOSs9q8OhfaZgey51MlekT3p8UwRqtXQfFuEJBhJNdLZwg=="],
"@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="],

View File

@@ -13,7 +13,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -31,7 +31,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -51,7 +51,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -69,7 +69,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -87,7 +87,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -105,7 +105,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -123,7 +123,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -141,7 +141,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -176,7 +176,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -207,7 +207,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -225,7 +225,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -243,7 +243,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -274,7 +274,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -297,7 +297,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -315,7 +315,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -338,7 +338,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -356,7 +356,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -374,7 +374,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -392,11 +392,11 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
res = autumn.customers.list(request={})
res = autumn.customers.list(start_cursor="", limit=10)
# Handle response
print(res)
@@ -410,7 +410,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -428,7 +428,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -446,7 +446,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -464,7 +464,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -482,11 +482,11 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
res = autumn.entities.list(request={})
res = autumn.entities.list(start_cursor="", limit=10)
# Handle response
print(res)
@@ -500,7 +500,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -526,7 +526,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -544,11 +544,11 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
res = autumn.events.list(offset=0, limit=50, customer_id="cus_123")
res = autumn.events.list(start_cursor="", limit=50, customer_id="cus_123")
# Handle response
print(res)
@@ -562,7 +562,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -580,7 +580,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -598,7 +598,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -616,7 +616,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -634,7 +634,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -655,7 +655,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -681,7 +681,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -699,7 +699,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -717,7 +717,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -735,7 +735,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -756,7 +756,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -774,7 +774,7 @@ actions:
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:

View File

@@ -1,16 +1,16 @@
lockVersion: 2.0.0
id: 05940b80-1ef8-40f4-9878-822fb2792070
management:
docChecksum: 932df88c151e0ec14207c14a42226c15
docVersion: 2.2.0
docChecksum: 34540949d95601a28137c2d13560c9aa
docVersion: 2.3.0
speakeasyVersion: 1.762.0
generationVersion: 2.882.0
releaseVersion: 0.4.18
configChecksum: 2263d20254e354a1792248274002f650
persistentEdits:
generation_id: de3d7b31-df08-4ffc-a2e2-ad7ce75ec74b
pristine_commit_hash: fd8c83857ce67ece55ef5a223e90b5394804c9b7
pristine_tree_hash: 92a87692bee9941efe458e10e8a3996f54ccd6d1
generation_id: d256ac1e-824f-41f5-a010-969a7a875085
pristine_commit_hash: 848cb25a7f4aae240abc1f508fbcf888c05c4da8
pristine_tree_hash: ad6e8e6015ee12d7e7db7442f5557ff499bed72d
features:
python:
additionalDependencies: 1.0.0
@@ -45,12 +45,8 @@ trackedFiles:
pristine_git_object: 8d79f0abb72526f1fb34a4c03e5bba612c6ba2ae
USAGE.md:
id: 3aed33ce6e6f
last_write_checksum: sha1:56fbca3ffdf97dfd213c67aff08e329aae496d0f
pristine_git_object: 338e57de579fc8a219b6580798c5632db01380b2
docs/models/action.md:
id: 3b583d6a609e
last_write_checksum: sha1:098b94f92de64e0d8913334d0889fd85ebe460b6
pristine_git_object: 7d100638aec1c657cb7cb6696ec0818b19661e80
last_write_checksum: sha1:d776c370bc736e3682169477ceb6ce139fe24d86
pristine_git_object: 69e9b3db23297366f991f0869a701a0b24f9b452
docs/models/aggregateeventscustomrange.md:
id: 6bcfabf82b0c
last_write_checksum: sha1:db82c5b951354ad2d10f2346cf57b098402df524
@@ -1361,8 +1357,8 @@ trackedFiles:
pristine_git_object: c1950ae7b75cbddefbb82acd0466f698520c81e3
docs/models/eventslistparams.md:
id: ab92b0ecc15c
last_write_checksum: sha1:5e6a8d722d79547d925198b7bab35f071c0fa1fe
pristine_git_object: 81ab707fd50986600be0a0bc1cf4f8af1e6b6eb9
last_write_checksum: sha1:94a3cd01e037761af88b5105b7061fa98f6512b6
pristine_git_object: 697198175854e321c902248cc725ad9bdafbb5ed
docs/models/expirydurationtype.md:
id: 7ba992bf53cc
last_write_checksum: sha1:368f1d47012462b1ce9bd136fd0aa4a88cf419fb
@@ -1377,8 +1373,12 @@ trackedFiles:
pristine_git_object: 9c0128850f8805a81bf4f631c12b19c31fc893f7
docs/models/finalizebalanceparams.md:
id: 610af9b4049c
last_write_checksum: sha1:9f6c1e1ac2c7c0670ee998fe33e2f633edfe5c0b
pristine_git_object: a295c77b9467111bb0e35746658df1acd5e4b51f
last_write_checksum: sha1:2c966f16004e08e546d2c04b408c8c7a59299796
pristine_git_object: 247b270724cb7fcc2dca44bf896b1ea6e40059cb
docs/models/finalizelockaction.md:
id: d62a2aba5849
last_write_checksum: sha1:95aa74b72b2c130af8cc4c2dd53b255d4b50dc5a
pristine_git_object: 80b3946081fdaf5c2500f1e1dd1722fbb2130f47
docs/models/finalizelockglobals.md:
id: 9d4bb30ca240
last_write_checksum: sha1:21e04ffc835a849a55954edb45b61cc2a450d7da
@@ -1929,8 +1929,8 @@ trackedFiles:
pristine_git_object: 196b6576bb0e6cd383dce7b9ca8809a5e516be6d
docs/models/listcustomersparams.md:
id: 8ac823390bd3
last_write_checksum: sha1:719e9f12cbcd82be36ab0e00332002ffe58f2dfa
pristine_git_object: 22499091dc914bb3b142af5727ce53f04ece6f1a
last_write_checksum: sha1:ee5fb1cef90fcbcbb7104ab28a3882ca930598eb
pristine_git_object: 2d22b90c77b474d406c1869a6c47e10cc109b514
docs/models/listcustomersplan.md:
id: 676e48e73f55
last_write_checksum: sha1:d7d03d3d56264e691c90389b4ea7d94d66b90963
@@ -1961,8 +1961,8 @@ trackedFiles:
pristine_git_object: b5a71cec323a5f010ec5393952655622d9957bf6
docs/models/listcustomersresponse.md:
id: 8bcc0ece3648
last_write_checksum: sha1:ea3bc6a1dec87761cce68202aea50e53ec061419
pristine_git_object: e51d209ca8ae108f5b18b5e418b9c94fde3a1191
last_write_checksum: sha1:bb231bcaa0609393f4b2c8f6d0d88057cb452d1c
pristine_git_object: 768c9f98a88555fae8dfbc3190041dc9c2caf3ca
docs/models/listcustomersrevenuecat.md:
id: 10d90016c4cd
last_write_checksum: sha1:6f2f3a096c1128270aac1f472374dd996aacae0b
@@ -1985,8 +1985,8 @@ trackedFiles:
pristine_git_object: f2257cb7235a82b97ba6a773a19a81345252e112
docs/models/listcustomerssubscriptionstatus.md:
id: f24b4a03e2ed
last_write_checksum: sha1:58115caac1e295f2d820402c1cf2db7b732dfa9d
pristine_git_object: 33fe11c96fdba7d466f2ae033f60ba3a370955c5
last_write_checksum: sha1:157530dabd0d28e5fd4a40b12d9a7b71a6addeea
pristine_git_object: 98b163a961fe45b25f8b94f59a92d5e7cb0e70dc
docs/models/listcustomersthresholdtype.md:
id: 891ad14c54c6
last_write_checksum: sha1:504aac5244104ff09d4ebff1e830af82defc9bf9
@@ -2045,8 +2045,8 @@ trackedFiles:
pristine_git_object: 0d6ca7bd4d0aff01cfbb4b2d81703523d24b1e6e
docs/models/listentitiesparams.md:
id: a98fa41dacb7
last_write_checksum: sha1:5c605039c907b42e10f1e8333f539ff2d6415c9c
pristine_git_object: c9bcfdec95553523717ec1c75fea47565c580856
last_write_checksum: sha1:92519d46339ac94f703fab562a52d26eb4b52cc1
pristine_git_object: 0fa5a5d8ee0d78889fb2049b2fe6c69632848b29
docs/models/listentitiesplan.md:
id: 35b85f6fd4b3
last_write_checksum: sha1:fa8c2a8ef01dfe81b72c9103d38db67585ac55ae
@@ -2065,8 +2065,8 @@ trackedFiles:
pristine_git_object: 6cc60dd796c7645d56e0b31bc85d79040261e519
docs/models/listentitiesresponse.md:
id: 795662eb1108
last_write_checksum: sha1:693193e2de204619f91348bf571691dc620f6ed6
pristine_git_object: 653ea83aacb56f39d9138566cd8b0bc7ea56aff1
last_write_checksum: sha1:898c1d9cb5e52991df0477c7ba8a73796d3a1844
pristine_git_object: f1b5599f926f0f17b49de1ca9c207010fc83afaf
docs/models/listentitiesspendlimit.md:
id: 3e35ba77a8ca
last_write_checksum: sha1:7488d1c40d09b3ba994613980780646f4a572cdd
@@ -2125,8 +2125,8 @@ trackedFiles:
pristine_git_object: 8fd9f92aef2315a6e9289700bbbc317dff8bc201
docs/models/listeventsresponse.md:
id: 150f903b0ed9
last_write_checksum: sha1:9eb8f98df1804fd7d9b0c1cedd5fad119992cb56
pristine_git_object: 0350b288fb5d4c93b021b448add0415bb9d66556
last_write_checksum: sha1:b82e8d94cf837a5dc4d066278853d0498c75d405
pristine_git_object: d0e11b78ece6784584fea25443b9549cd6b012c6
docs/models/listfeaturescreditschema.md:
id: bfa151aef980
last_write_checksum: sha1:50f8d085ceaebbdd7e246a48eaaf185b49329d95
@@ -4109,40 +4109,40 @@ trackedFiles:
pristine_git_object: 9632d9df66ca144a883a6a61092994f90b6b636c
docs/sdks/autumn/README.md:
id: d27c9292a1a3
last_write_checksum: sha1:fd96ce6718b4ade1cd4676d3a88bdd879e0dbafe
pristine_git_object: 8f377e35ef96f161e3d1899234b3d9d7576f3941
last_write_checksum: sha1:10fe85a3489ddeb4e769136e5a5d8199901ca6a8
pristine_git_object: 140a3ecb60eafa96438e9b8723a8ac35f688fbcd
docs/sdks/balances/README.md:
id: 6ca85866f00d
last_write_checksum: sha1:71ae48253fc0cba2f21f5aa8aa31170c5f6b446e
pristine_git_object: db2b13c3ee155b8d0740c164c952f2adb7413138
last_write_checksum: sha1:486057543b5d9ba28039e8c521c6da05b318a378
pristine_git_object: a90be00054691592cd72127dfcdf499c3dc38fb3
docs/sdks/billing/README.md:
id: dc915331dd9d
last_write_checksum: sha1:4ae19aa53a8e85f4c606f2accf9f2431104014bf
pristine_git_object: 75a0f38995718815c8b9a761f127416e586edab0
last_write_checksum: sha1:dfba27127f0c8193a03aca5f3bbdf3f404f9bdd5
pristine_git_object: 2b1d25e67802c53a7e7e18cd14d4e695547b98b0
docs/sdks/customers/README.md:
id: 9332759cffc2
last_write_checksum: sha1:a242d24e05645c1d7e193a2de6b05cd0d75ec1ec
pristine_git_object: 629f6540f827518a16bdb4b97ce334ec4ceed8cb
last_write_checksum: sha1:3ba96b62f6a62480122a03a7f8c27c119eefade6
pristine_git_object: 45bb7e0da6bc397921f731c45f2a8bb8e1ecc664
docs/sdks/entities/README.md:
id: a140ac5181b9
last_write_checksum: sha1:70e5e30e50ef656d3877819f385d7c07d55116de
pristine_git_object: ac31c0445c4e24f84af187662a57ea740d14b024
last_write_checksum: sha1:ce657711d3d6ba38e92cd3d96964248dffafbabe
pristine_git_object: 51e73e75e6156f7471111069d2a84223089dd56e
docs/sdks/events/README.md:
id: cf45a4390b9b
last_write_checksum: sha1:cea99762b01b7bae01def1685a4ad7807a4d60dd
pristine_git_object: 428407a3e960acd6188d6241d16268fcb4868503
last_write_checksum: sha1:2291068c2b8ae415d71094b02d38cdac7ad83284
pristine_git_object: d5ead9109b17b6e015de5af749a240dadd440068
docs/sdks/features/README.md:
id: e885cfb7247b
last_write_checksum: sha1:ab8f4c6032ebaa6e2636c27c6a0c66138cb00a7d
pristine_git_object: f15f599301140e1f7af1a6e1c9462464b71a4437
last_write_checksum: sha1:7f8cc6ca8855001c309a48738fb12782b09d3cf1
pristine_git_object: e780c68e76247300ddcad095c859c1312e268eed
docs/sdks/plans/README.md:
id: 2d8c741fff57
last_write_checksum: sha1:19e53edc483ea98f9e427c9165f4d625c3ac7109
pristine_git_object: d13a6b26e488dbcbb08f1db69ff102a54dffcf78
last_write_checksum: sha1:a956c9b35832ad1b4b988220bbf133aa87c73301
pristine_git_object: 25a47ac0fdb8bc31110b3d96d2656bf744969f37
docs/sdks/referrals/README.md:
id: 50b71f597f20
last_write_checksum: sha1:583c44cd70208e8ea9e286b54a5b82f837c8a4be
pristine_git_object: 9a0dd0aec6d9b00b984510dfe6b8c12e43b60adf
last_write_checksum: sha1:de99a40759f0d5c8850f2f59613d20d646161c53
pristine_git_object: 72f6ca33937b57d77f1969e98a91c0f567893837
py.typed:
id: 258c3ed47ae4
last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60
@@ -4177,12 +4177,12 @@ trackedFiles:
pristine_git_object: 3e604651c1eae73d815b276806e73b2f1334bb79
src/autumn_sdk/_version.py:
id: a98babfdf4fc
last_write_checksum: sha1:48d80ec79d1e2d4c26194db9db1ac7886acd76f1
pristine_git_object: 6fd40e5912793561523e90b1595f3300d62bf238
last_write_checksum: sha1:e9f37410254f0de534a9a04e67c8c736e38bf56d
pristine_git_object: 5876591b27e7f0ae36490c47c2893b48a3eaa8af
src/autumn_sdk/balances.py:
id: 0a15be654dad
last_write_checksum: sha1:51d725f62f14d78037909fd4399d77a1291df149
pristine_git_object: e03f676bfe86690f4c87d78f0b205764f46d1def
last_write_checksum: sha1:acf16860484910c0acca47291418a5f38997769f
pristine_git_object: 8798a61c5415cfb6ab870fe26264447ddb134f63
src/autumn_sdk/basesdk.py:
id: 8c9c35fe744d
last_write_checksum: sha1:7fefc93ebfec063a4ffcb8ab6f4ed5675e7f50dd
@@ -4193,12 +4193,12 @@ trackedFiles:
pristine_git_object: fac65762df83ced2a21a69d2d5b50a06f2ff0105
src/autumn_sdk/customers.py:
id: 5c5a0a07a433
last_write_checksum: sha1:9e122b366aaf67db8fbc4866c6173f0f57362cbb
pristine_git_object: 0f6c4580e9aeacd2441b8bc7bf8602f7e2451a70
last_write_checksum: sha1:bbdd432fc314a94a6ac5bd6335c8cf9474e02b66
pristine_git_object: aaf9171b48544d4e5039a9a210a67350bf2a8e71
src/autumn_sdk/entities.py:
id: 32ba2aa0874c
last_write_checksum: sha1:a314d4f2e26711b74a6be67b6d08e7fa24871213
pristine_git_object: 8fcca916bb052891a25cba998554e3a429a494e8
last_write_checksum: sha1:ced8d05bea86e3c180b1247bd3bbb6c72ed6c2f8
pristine_git_object: 8b05ef6046e2704c45a50c5149774c0aacaa552c
src/autumn_sdk/errors/__init__.py:
id: 242853123cf2
last_write_checksum: sha1:1c4f4e0181a6598b531c2621340548b003df6e2a
@@ -4221,8 +4221,8 @@ trackedFiles:
pristine_git_object: 1efa993593b78b8f93587adf8a12ce2efbb11002
src/autumn_sdk/events.py:
id: 3421eef7bbd5
last_write_checksum: sha1:5ede26c69706f2288a19d281f3695d3bd05d2b46
pristine_git_object: 8c9400ea6614688183791d4b49e8ba6d9b4e2fcc
last_write_checksum: sha1:0fb766e1ff058eb694f3e2eaadd06047f57223ad
pristine_git_object: b346cbffe1811393d45f0e89673cd2b27e64b27f
src/autumn_sdk/features.py:
id: 79d780190f74
last_write_checksum: sha1:24f5dcce8bc1f0afc6f2dc0af6e2bc71ca1c1d8d
@@ -4233,52 +4233,52 @@ trackedFiles:
pristine_git_object: 89560b566073785535643e694c112bedbd3db13d
src/autumn_sdk/models/__init__.py:
id: bcf3802243ff
last_write_checksum: sha1:6e443839dc7cb5aa18fae8aad4abb4145f1bdb01
pristine_git_object: 831468bf4b03022abfdccae15ce97d2739d92cde
last_write_checksum: sha1:1952ea71ecdd4ff351490a8060897414eabd8031
pristine_git_object: 2ba9827457de2b6af0b6fc64b5a8878fc65ed616
src/autumn_sdk/models/aggregateeventsop.py:
id: 01321099f2a5
last_write_checksum: sha1:e8135648e39b731396565bcf59ec5a5cc400ae90
pristine_git_object: 898d3fdd6f7207730f04e9ca09bd19c3b3ae51d1
last_write_checksum: sha1:bbaf78080f665b38e531d2427c787e40ca0635a7
pristine_git_object: 3a4476749ea87675039e23243ed3865d3bdf57ca
src/autumn_sdk/models/attachop.py:
id: ebb59e06476c
last_write_checksum: sha1:a7f59812fa59058b5360c8af62ed0fc4a811cd47
pristine_git_object: fe27daebcf872612132a8500f274190b8b57fed5
last_write_checksum: sha1:f3258e635b6499464adf58005da5315a4e954e14
pristine_git_object: 1c74b555da5b64b178558d2a4fdc021724d2b3bc
src/autumn_sdk/models/balance.py:
id: a6354d7c4b97
last_write_checksum: sha1:54a4422123d262666370d2e1238d990ef1dba324
pristine_git_object: 10a5b2ae10d0daf7adc5e9f90de4d25665732a62
src/autumn_sdk/models/billingupdateop.py:
id: a2f17c75cfd3
last_write_checksum: sha1:b02b9483bc27f88bec0d3d3866735ca500929f34
pristine_git_object: 8a31641131897d8e8ab7b866b1a1bb14454f2d93
last_write_checksum: sha1:aade53f9ad5783e23c5141426ef05934d252a763
pristine_git_object: 25636ae22d123f0f378d41dc695dba42d18b4bee
src/autumn_sdk/models/checkop.py:
id: 31c2f84723c6
last_write_checksum: sha1:0dc2592b51e741677419a26ee6557815eeb33b03
pristine_git_object: 45a5f66396b8b0716c4eafa4a595817f3c6f680f
last_write_checksum: sha1:7cb0cbbf11f480372aa2c5a3466b07f78e301226
pristine_git_object: b165ecfba6d2d2d1ccf9a21029d6fa87db67b470
src/autumn_sdk/models/createbalanceop.py:
id: 27daf4da75bf
last_write_checksum: sha1:b6da2d7778cd4b98f0e6612810726512203eb1de
pristine_git_object: 29b8f2f3236a1fd875aac10ee13416ddecb62445
last_write_checksum: sha1:f034893074f11952de2b174c8f2991232e512858
pristine_git_object: 42d3636f3548ca45bcb5059f38f4a3d6762948f6
src/autumn_sdk/models/createentityop.py:
id: bf9521c0cfec
last_write_checksum: sha1:cb70cf946c37ffcc39c1cf128ff0fb2b4f880a03
pristine_git_object: 856605cbf8532734f7786ba40092082fb4f2f0d1
last_write_checksum: sha1:6a026ae9529f5ba00688fa306914ba058c9e9c05
pristine_git_object: 55fbc8631313633e7bdc82a707a11ab1dad04e1f
src/autumn_sdk/models/createfeatureop.py:
id: 68487033fbe5
last_write_checksum: sha1:7700b9041190ce954caa13d6981c0c1460e5ee20
pristine_git_object: 35a43e4dd6ea06d0ffbbde5ffaead959ce207632
last_write_checksum: sha1:c68f6e79a3dc3d3436d607fae75e4c4a958b7141
pristine_git_object: 3a3fa7e5caf97561ce5ea6f494941cb1ce64b67c
src/autumn_sdk/models/createplanop.py:
id: 077e6c7db2ad
last_write_checksum: sha1:0c61ef749d904298fb13666629dd8279e72dfff6
pristine_git_object: 83a58b0e78861300af0d4ddf3901e3474e2683d6
last_write_checksum: sha1:abd3f7dda2a80ddeeee92ec78efb394384f8db93
pristine_git_object: 1b6499a88233db6b079ec7add34d9726331f329d
src/autumn_sdk/models/createreferralcodeop.py:
id: 2f5f7b136c39
last_write_checksum: sha1:aee36f911153fc0dab9fd096dbb82d1083a61d28
pristine_git_object: cd3ad48900dab5fd4b07db41d62388e68a1818b2
last_write_checksum: sha1:9ef6a7e87ffd4cb0fb91f3592abb3b1ef51cb415
pristine_git_object: fea4d1bb3875848e66502705e4cb818233ec3f5a
src/autumn_sdk/models/createscheduleop.py:
id: afb0cf1cf7f2
last_write_checksum: sha1:b45fd72cb5e8c76c29f837a4da4afcf76c8e8bf2
pristine_git_object: 01b44eae27d95ceaca00b0b035202830305d99b4
last_write_checksum: sha1:435695ce987ee9e5393bb64ba84f479007f7cfd3
pristine_git_object: 97d115471f43fcbbc6c27f64112c0dd76dea3252
src/autumn_sdk/models/customer.py:
id: 8ed0174f7272
last_write_checksum: sha1:b34d9296ba774e5a622b84a48ce38cdab983953c
@@ -4293,136 +4293,136 @@ trackedFiles:
pristine_git_object: 6d020a0f8da88109f10c72fd81248a4d5194a31e
src/autumn_sdk/models/deletebalanceop.py:
id: 97d06f64852a
last_write_checksum: sha1:ba767e7c2cfe20f213abff1235768b6e789ef11b
pristine_git_object: d8b06d3c0000690d712dfeb7771a4c08d0c9932f
last_write_checksum: sha1:f8c0f83b5afa8636d3cb97e4c52ae472e55415a2
pristine_git_object: ba888a4d97ab8d8fb72e044756e574adf3f4335b
src/autumn_sdk/models/deletecustomerop.py:
id: dc7a1e2cc90b
last_write_checksum: sha1:8b345d4715c2fa291674b86287439e824cd479ce
pristine_git_object: f731ec176a58301941259ea8c4b36353703802bb
last_write_checksum: sha1:552184c914a58b499809d828293484a812015511
pristine_git_object: 9012d64fcd53fa2b0e9a3162814d0eab49d8ba33
src/autumn_sdk/models/deleteentityop.py:
id: f875e07e0401
last_write_checksum: sha1:a596e590cb293b64f97549972cb674f0ea6661c0
pristine_git_object: 994654d79145e1b31ccf1bb2400732e13060c11c
last_write_checksum: sha1:1ea6eb0899b768e16506aca2b4642b79b1a9cece
pristine_git_object: b83e92df7f07e812a2b742858f1057ea36f109b7
src/autumn_sdk/models/deletefeatureop.py:
id: 2cde77bc8684
last_write_checksum: sha1:eb0e3de24676ed9ca638050e753adcf77d9e9273
pristine_git_object: d16ff515bd2fd4ae2c67c7b3099b9bbc981e966d
last_write_checksum: sha1:bc4e0d34b684036d267adb46f3f5d568d89a895d
pristine_git_object: 73d6550e9d3d672e269f03d0123682e31081a4e5
src/autumn_sdk/models/deleteplanop.py:
id: 4dd8168b93d3
last_write_checksum: sha1:b66060053ba95103b6f9c21583c837aff5bf4f5b
pristine_git_object: 8399927609dfaba9ca603a77e3f85ada3861d2f2
last_write_checksum: sha1:13d5c802291fe3009fc2e75c417d9eaaa4a0e6f1
pristine_git_object: 7ceead5c6d6226a1e28dabb594031b4e7f223142
src/autumn_sdk/models/finalizelockop.py:
id: 8ae2484b0916
last_write_checksum: sha1:50898394734e6e9a366363ef64dd6ac917d61ad2
pristine_git_object: d7744bc3f223baddeed24f3e14315d9f6da0b84d
last_write_checksum: sha1:81748d2c2608a6ce2da6eaab88384263f194b724
pristine_git_object: f10712da219176f9298c3426dd7b1372ae8777dd
src/autumn_sdk/models/getcustomerop.py:
id: 266e08dde55d
last_write_checksum: sha1:26c01f348d7b5fa3d7416cd032f39c4e2fa40ef3
pristine_git_object: 8ce7e5cbc0aeb86645dad533bb80758be9e4fc5d
last_write_checksum: sha1:99d1a3e00f783dbeb7e90362549917fc6e892140
pristine_git_object: 2770ceced0327c6b2c38fa3fd91662bb5da786f9
src/autumn_sdk/models/getentityop.py:
id: 6a624594b41f
last_write_checksum: sha1:c269882e521ec211782e7ea02149157a2d09b5d5
pristine_git_object: 29cba6a2449a90f021a82911a730592d102ef992
last_write_checksum: sha1:3b71deedab3c21399d5d6afd4372dd31322afcc8
pristine_git_object: 2b8a05c98adc64b7f24d1078ec27d190a0138f2d
src/autumn_sdk/models/getfeatureop.py:
id: 72b158789497
last_write_checksum: sha1:89a9f44a1af9b36cf229f80000cae16054da17a5
pristine_git_object: 63aec0714ea5d7f98ffdb2d7125d0b9db6fe8537
last_write_checksum: sha1:dccbc8de6a2d4cc07a4045585f12d8649b9f4c0a
pristine_git_object: a3b6d982c56568f07fc5b226e4d836b62dc7d331
src/autumn_sdk/models/getorcreatecustomerop.py:
id: acfac0d7be14
last_write_checksum: sha1:9e7565db7d134b1c5925e4e4d18e26695b74e4f1
pristine_git_object: c929128d66a9269897320872bf8eefb7b64bd9e1
last_write_checksum: sha1:524b618ee1defe01311abb69aebedfa737015214
pristine_git_object: ecf53428c556a2515c44ee3bb7e31a2aab91f1f4
src/autumn_sdk/models/getplanop.py:
id: 590fb77ac88d
last_write_checksum: sha1:81ea83faee9199b1c02f72521ed5dff3c1da74c4
pristine_git_object: d08f2c9fc8056c6adb96024112c4aaade0ee5cb5
last_write_checksum: sha1:4b545b24018986ba9d93107df7840f39fb1f861c
pristine_git_object: e619e84014109d0ac73df596b4926a8f6dc92ee3
src/autumn_sdk/models/internal/__init__.py:
id: 2906fe7f2cde
last_write_checksum: sha1:1905b58b74ecc52346d8f5c24ded2b6d6e1dad4a
pristine_git_object: ceabb1b83cb7cc1e21e65639c69c30749d36f6e2
src/autumn_sdk/models/internal/globals.py:
id: 4e33eb99f463
last_write_checksum: sha1:68407c632e298626a027a6da8e5c87bfc34ce496
pristine_git_object: 857f87628bd168b87758ac04fc88a926255d7451
last_write_checksum: sha1:b12bb60e74b8678b0fd0543223c09cc3d77dcc8b
pristine_git_object: 2614675c993545d5df1e516d043649e50281c2a3
src/autumn_sdk/models/listcustomersop.py:
id: d7074740b8b0
last_write_checksum: sha1:927f6bd702f74d13fb90e93865b7c38f7ec6ea9d
pristine_git_object: 66eccd8ee4fddda461be05ee7516c5e591380464
last_write_checksum: sha1:a5d8ecb8aa876fbc13e45895238fdd4b8ef00262
pristine_git_object: efb7ae861ed3c85269dea269465c198119fe37fe
src/autumn_sdk/models/listentitiesop.py:
id: 918a05430967
last_write_checksum: sha1:8fa96fde2c49b269a489e2a7a44533f2d71f2ed4
pristine_git_object: 25e5f40817b1bf1d885ff7ee6b23db636c3e11be
last_write_checksum: sha1:dbcc46f4782eab84662ba8426cadecdae7473927
pristine_git_object: 7fe4e89b0d9c2a6cb6df185e6f0fc995687a4f97
src/autumn_sdk/models/listeventsop.py:
id: 751b0200d91d
last_write_checksum: sha1:d1fc02ee236167757b24b0ff5d07ef6c50ca8422
pristine_git_object: 2dee5460c65ef6cc4be4cd23b5d798ecf26274a7
last_write_checksum: sha1:a57b8d56c96c341e8572b4395c12209a62ff6b74
pristine_git_object: 86a98a1d2f3df5e7a53326e54a9ddb2883b711ed
src/autumn_sdk/models/listfeaturesop.py:
id: 95f88614bd8e
last_write_checksum: sha1:983c9bab14d984cdc250fd5822ca98dc373c3cae
pristine_git_object: 710a3e36719b112a82fa98903073bb090f72c2ec
last_write_checksum: sha1:3c2e2e44a81954ab08a70e7fa8dfbea30ab0aeb8
pristine_git_object: 8819d5dc8edea75b53ba1d465773b158eb95f310
src/autumn_sdk/models/listplansop.py:
id: fdf892c403f4
last_write_checksum: sha1:113ab9ebeee0eefbde8f8127c707c0e877ce44ce
pristine_git_object: eeb10aef025dba4e535b1b752707dba2b8c0cc44
last_write_checksum: sha1:eec171b45ca5d8b9e7d13e307c9125a0e6c92970
pristine_git_object: cc085894937b7e149381b51729063f03d39e4eb5
src/autumn_sdk/models/multiattachop.py:
id: dfdf7952c870
last_write_checksum: sha1:bc0ef7eee37a54bb0823e7270535ed079fff9113
pristine_git_object: 8cf4105bebefbcf73a641cc92f3bbf176fc1eba8
last_write_checksum: sha1:58d91eee19f9d021419ef6d98e15f65a435fdc8f
pristine_git_object: 98621cdbe47a5109f68dd5c1dce3127b1aa2545d
src/autumn_sdk/models/opencustomerportalop.py:
id: 004cc9a6466f
last_write_checksum: sha1:b190ddc8e45b3198fa12ae5f49deb9d8cac20a5e
pristine_git_object: 8383509aa89e0c11988baef8e424f5ae682d5c8e
last_write_checksum: sha1:e32037dcfea1c4bd953f749f74775b3d7d1d83c3
pristine_git_object: 79ac016f241d82916ccc1aab7c7e3a7e3fb9aef1
src/autumn_sdk/models/plan.py:
id: f85c4e07540d
last_write_checksum: sha1:69a6d5e972a3d1d16bda1771940d66bbf403726d
pristine_git_object: 99032117da3cc10b694f41fd0bc7a0c1f2bd7973
src/autumn_sdk/models/previewattachop.py:
id: 2b361be4bfa8
last_write_checksum: sha1:269b008a7f1899ba875a08bb44d37096d74b89c7
pristine_git_object: 4752cdb0c8e333a6407ffbb152463cce963fcada
last_write_checksum: sha1:19cfdad77a54a7419f28e9fc1f3cd81e1cf831db
pristine_git_object: d1b9ca8d15840e4ffb6a5804c3037bebbe188b8e
src/autumn_sdk/models/previewmultiattachop.py:
id: 963ffcd646a4
last_write_checksum: sha1:2095cb695b366c95cf32a25041b747596adc9cbd
pristine_git_object: 2540dad98d3028429071d41245b4e1db0a65371d
last_write_checksum: sha1:b8ff436f7435ce227a5426ae9fe5059e08cbef2b
pristine_git_object: 3a0561ab842ec6d09dda0e9bae06e6059c92e75a
src/autumn_sdk/models/previewupdateop.py:
id: 081d5f08508d
last_write_checksum: sha1:084d58dd000211d786551d314b08ff2ec7f3f180
pristine_git_object: 6c1ba3ccca01be177621b11ca4724fc658179434
last_write_checksum: sha1:dbf17616256e92fb18393f95bd536098ee4b6f7a
pristine_git_object: 346a1eb769186d700e50c3243fdbe09fea9ea251
src/autumn_sdk/models/redeemreferralcodeop.py:
id: 0abd7bfae718
last_write_checksum: sha1:df1248aa8876e069c8094cba0541acc4911db620
pristine_git_object: 2e67e9b952a5107efcb3d79f2d9b6b63c06b4030
last_write_checksum: sha1:b1a584450f1f79e796dd755a9305dc30a07ed601
pristine_git_object: 93b78a37bc7276b56d330f437e43eba7af4302c4
src/autumn_sdk/models/security.py:
id: 27d01b755fbe
last_write_checksum: sha1:e5ac2e52ed9c2db46d4989c4744c230dd12bdf01
pristine_git_object: aa686dd6f85ae1e27450392fcfe02527adfe8e61
src/autumn_sdk/models/setuppaymentop.py:
id: 603339ee67e3
last_write_checksum: sha1:67d270cd5abfb97b1225fd1fb90fdeb732772edd
pristine_git_object: dee5c4638d610b7dbad937804b7e9a30269d16cf
last_write_checksum: sha1:7a410d7b24326e3cf61fb1f1bf6871d0328cad18
pristine_git_object: 9c8c2e6b00f79e487e719904876c3ab2e88b31f4
src/autumn_sdk/models/trackop.py:
id: 2a744315e781
last_write_checksum: sha1:bf7bba4e903181d599be5be9c9fa55556be4b409
pristine_git_object: b6ba6867a53fc108da23705b39cb29ba6566f296
last_write_checksum: sha1:a03320b078d71050927407e1149770bf357bb7ae
pristine_git_object: 6a5c9d1796caf9aab48df3315196337c1c82d028
src/autumn_sdk/models/updatebalanceop.py:
id: cd80d90d4cae
last_write_checksum: sha1:7b6b881cc82b937e93cfd58f17d7f3d83bdb39f1
pristine_git_object: d69bad2bc308f31e4983cf5e2cd0639cedd9c9aa
last_write_checksum: sha1:729cd503f116f20564b7bccc79c60ac1011554f2
pristine_git_object: c0bbec7e538787d31d5eaebafa5c9033b6df9da3
src/autumn_sdk/models/updatecustomerop.py:
id: 28b9d5b59bae
last_write_checksum: sha1:3e8a1554ca804b5224f6610db19469d1f33baba7
pristine_git_object: 16ed7797c797ef1fd60c1de0c38770d30282c853
last_write_checksum: sha1:76c2569065030ec3f17314b057cec06d300aecd6
pristine_git_object: 63e06deec671e219be422630460b483fc31e16bd
src/autumn_sdk/models/updateentityop.py:
id: a49305af1e2e
last_write_checksum: sha1:ddd0da8cc96a40bf7ba51bfb060028b2b281d5e4
pristine_git_object: 9b6d1378b4defc1056a93eef6694159b5e91b326
last_write_checksum: sha1:448d0b049bedfd94fba404a9053da4f959200dcf
pristine_git_object: 80fe86883274d4bcd47b2f4f66d9a8286c98cdbe
src/autumn_sdk/models/updatefeatureop.py:
id: 2fdfed4aa2f2
last_write_checksum: sha1:67e6bcbdf14980e19787d10e0ab42485acff0862
pristine_git_object: 9507c8601dca2cefbc0b8b7d423a38a8272fe580
last_write_checksum: sha1:31b590aab5fd341dbf9d3ae8ec97f01fc6fe5090
pristine_git_object: 563058b5a7d4a5805ba9d5109c7383ecbecd3d1c
src/autumn_sdk/models/updateplanop.py:
id: 753ddf45ca40
last_write_checksum: sha1:8c4355ce9a7f7f5d7e59b95b9106d697c40a4048
pristine_git_object: 2bc28f5cdf9a47eabcd2536355c5fc431866e3a7
last_write_checksum: sha1:7806983a99cefbb6ed167afdf8f4401d7d7f802d
pristine_git_object: 9a4531386163eb8a82dd510b4db243541535d7dd
src/autumn_sdk/plans.py:
id: cf1ebabb687c
last_write_checksum: sha1:8cca1565af6b67ab6947b016d0ab8f7a431fa824
@@ -4546,7 +4546,7 @@ examples:
speakeasy-default-attach:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "plan_id": "pro_plan", "redirect_mode": "if_required", "billing_cycle_anchor": "now"}
responses:
@@ -4556,7 +4556,7 @@ examples:
speakeasy-default-get-or-create-customer:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "name": "John Doe", "email": "john@example.com"}
responses:
@@ -4566,17 +4566,17 @@ examples:
speakeasy-default-list-customers:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"offset": 0, "limit": 10}
application/json: {"start_cursor": "", "limit": 10}
responses:
"200":
application/json: {"list": [{"id": "2ee25a41-0d81-4ad2-8451-ec1aadaefe58", "name": "Patrick", "email": "patrick@useautumn.com", "created_at": 2358.1, "fingerprint": null, "stripe_id": null, "env": "sandbox", "metadata": {}, "send_email_receipts": false, "billing_controls": {}, "subscriptions": [{"id": "<id>", "plan_id": "<id>", "auto_enable": true, "add_on": false, "status": "active", "past_due": true, "canceled_at": 1145.98, "expires_at": 4027.68, "trial_ends_at": 910.35, "started_at": 7325.71, "current_period_start": 406.39, "current_period_end": 2629.33, "quantity": 1}], "purchases": [], "balances": {"messages": {"feature_id": "<id>", "granted": 100, "remaining": 0, "usage": 100, "unlimited": false, "overage_allowed": false, "max_purchase": 4531.44, "next_reset_at": 1010.14, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "<id>", "included_grant": 4967.46, "prepaid_grant": 6928.7, "remaining": 0, "usage": 100, "unlimited": false, "reset": {"interval": "month", "resets_at": 7938.58}, "price": null, "expires_at": 7264.51}]}}, "flags": {"advanced_workflows": {"id": "cus_ent_abc123", "plan_id": "pro_plan", "expires_at": null, "feature_id": "advanced_workflows"}}, "config": {"disable_pooled_balance": false}, "processors": {"stripe": {"id": "cus_U0BKxpq1mFhuJO"}}}], "has_more": false, "offset": 0, "limit": 10, "total": 1, "total_count": 100, "total_filtered_count": 42}
application/json: {"list": [{"id": "2ee25a41-0d81-4ad2-8451-ec1aadaefe58", "name": "Patrick", "email": "patrick@useautumn.com", "created_at": 2358.1, "fingerprint": null, "stripe_id": null, "env": "sandbox", "metadata": {}, "send_email_receipts": false, "billing_controls": {}, "subscriptions": [{"id": "<id>", "plan_id": "<id>", "auto_enable": true, "add_on": false, "status": "active", "past_due": true, "canceled_at": 1145.98, "expires_at": 4027.68, "trial_ends_at": 910.35, "started_at": 7325.71, "current_period_start": 406.39, "current_period_end": 2629.33, "quantity": 1}], "purchases": [], "balances": {"messages": {"feature_id": "<id>", "granted": 100, "remaining": 0, "usage": 100, "unlimited": false, "overage_allowed": false, "max_purchase": 4531.44, "next_reset_at": 1010.14, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "<id>", "included_grant": 4967.46, "prepaid_grant": 6928.7, "remaining": 0, "usage": 100, "unlimited": false, "reset": {"interval": "month", "resets_at": 7938.58}, "price": null, "expires_at": 7264.51}]}}, "flags": {"advanced_workflows": {"id": "cus_ent_abc123", "plan_id": "pro_plan", "expires_at": null, "feature_id": "advanced_workflows"}}, "config": {"disable_pooled_balance": false}, "processors": {"stripe": {"id": "cus_U0BKxpq1mFhuJO"}}}], "next_cursor": null}
updateCustomer:
speakeasy-default-update-customer:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "name": "Jane Doe", "email": "jane@example.com"}
responses:
@@ -4586,7 +4586,7 @@ examples:
speakeasy-default-delete-customer:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "delete_in_stripe": false}
responses:
@@ -4616,7 +4616,7 @@ examples:
speakeasy-default-billing-update:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "plan_id": "pro_plan", "feature_quantities": [{"feature_id": "seats", "quantity": 10}], "redirect_mode": "if_required", "billing_cycle_anchor": "now"}
responses:
@@ -4686,7 +4686,7 @@ examples:
speakeasy-default-list-plans:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {}
responses:
@@ -4696,7 +4696,7 @@ examples:
speakeasy-default-preview-attach:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "plan_id": "pro_plan", "redirect_mode": "if_required", "billing_cycle_anchor": "now"}
responses:
@@ -4726,7 +4726,7 @@ examples:
speakeasy-default-setup-payment:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "success_url": "https://example.com/account/billing", "billing_cycle_anchor": "now"}
responses:
@@ -4756,7 +4756,7 @@ examples:
speakeasy-default-open-customer-portal:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "return_url": "https://useautumn.com"}
responses:
@@ -4766,7 +4766,7 @@ examples:
speakeasy-default-preview-update:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "plan_id": "pro_plan", "feature_quantities": [{"feature_id": "seats", "quantity": 15}], "redirect_mode": "if_required", "billing_cycle_anchor": "now"}
responses:
@@ -4776,7 +4776,7 @@ examples:
speakeasy-default-create-balance:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "feature_id": "api_calls", "reset": {"interval": "month"}}
responses:
@@ -4786,7 +4786,7 @@ examples:
speakeasy-default-update-balance:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "feature_id": "api_calls", "remaining": 5}
responses:
@@ -4796,7 +4796,7 @@ examples:
speakeasy-default-check:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "feature_id": "messages"}
responses:
@@ -4808,7 +4808,7 @@ examples:
speakeasy-default-track:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "feature_id": "messages", "value": 1}
responses:
@@ -4840,7 +4840,7 @@ examples:
speakeasy-default-create-referral-code:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "program_id": "prog_123"}
responses:
@@ -4850,7 +4850,7 @@ examples:
speakeasy-default-redeem-referral-code:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"code": "REF123", "customer_id": "cus_456"}
responses:
@@ -4860,7 +4860,7 @@ examples:
speakeasy-default-create-entity:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"name": "Seat 42", "feature_id": "seats", "customer_id": "cus_123", "entity_id": "seat_42"}
responses:
@@ -4870,7 +4870,7 @@ examples:
speakeasy-default-get-entity:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"entity_id": "seat_42"}
responses:
@@ -4880,7 +4880,7 @@ examples:
speakeasy-default-delete-entity:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "entity_id": "seat_42"}
responses:
@@ -4890,17 +4890,17 @@ examples:
speakeasy-default-list-events:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"offset": 0, "limit": 50, "customer_id": "cus_123"}
application/json: {"start_cursor": "", "limit": 50, "customer_id": "cus_123"}
responses:
"200":
application/json: {"list": [{"id": "evt_36xpk2TmuQX5zVPPQ8tCtnR5Weg", "timestamp": 1765958215459, "feature_id": "credits", "customer_id": "0pCIbS4AMAFDB1iBMNhARWZt2gDtVwQx", "value": 30, "properties": {}, "deductions": [{"balance_id": "cus_ent_3DdSDtFBlvDbjyUuJeUIbQlyN12", "feature_id": "credits", "plan_id": "pro", "reset": {"interval": "month", "resets_at": 1765958215459}, "value": 30}]}, {"id": "evt_36xmHxxjAkqxufDf9yHAPNfRrLM", "timestamp": 1765956512057, "feature_id": "credits", "customer_id": "0pCIbS4AMAFDB1iBMNhARWZt2gDtVwQx", "value": 49, "properties": {}, "deductions": null}], "has_more": false, "offset": 0, "limit": 100, "total": 2}
application/json: {"list": [{"id": "evt_36xpk2TmuQX5zVPPQ8tCtnR5Weg", "timestamp": 1765958215459, "feature_id": "credits", "customer_id": "0pCIbS4AMAFDB1iBMNhARWZt2gDtVwQx", "value": 30, "properties": {}, "deductions": [{"balance_id": "cus_ent_3DdSDtFBlvDbjyUuJeUIbQlyN12", "feature_id": "credits", "plan_id": "pro", "reset": {"interval": "month", "resets_at": 1765958215459}, "value": 30}]}, {"id": "evt_36xmHxxjAkqxufDf9yHAPNfRrLM", "timestamp": 1765956512057, "feature_id": "credits", "customer_id": "0pCIbS4AMAFDB1iBMNhARWZt2gDtVwQx", "value": 49, "properties": {}, "deductions": null}], "next_cursor": "eyJ2IjowLCJpZCI6ImV2dF8zNnhtSHh4akFrcXh1ZkRmOXlIQVBOZlJyTE0iLCJ0IjoxNzY1OTU2NTEyMDU3fQ"}
aggregateEvents:
speakeasy-default-aggregate-events:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "feature_id": "api_calls", "range": "30d", "bin_size": "day"}
responses:
@@ -4910,7 +4910,7 @@ examples:
speakeasy-default-create-feature:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"name": "API Calls", "type": "metered", "consumable": true, "feature_id": "api-calls"}
responses:
@@ -4920,7 +4920,7 @@ examples:
speakeasy-default-get-feature:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"feature_id": "api-calls"}
responses:
@@ -4930,7 +4930,7 @@ examples:
speakeasy-default-list-features:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
responses:
"200":
application/json: {"list": [{"id": "api-calls", "name": "API Calls", "type": "metered", "consumable": true, "display": {"singular": "API call", "plural": "API calls"}, "archived": false}, {"id": "credits", "name": "Credits", "type": "credit_system", "consumable": true, "credit_schema": [{"metered_feature_id": "api-calls", "credit_cost": 1}, {"metered_feature_id": "image-generations", "credit_cost": 10}], "display": {"singular": "credit", "plural": "credits"}, "archived": false}]}
@@ -4938,7 +4938,7 @@ examples:
speakeasy-default-update-feature:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"name": "API Requests", "display": {"singular": "API request", "plural": "API requests"}, "feature_id": "api-calls"}
responses:
@@ -4948,7 +4948,7 @@ examples:
speakeasy-default-delete-feature:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"feature_id": "old-feature"}
responses:
@@ -4958,7 +4958,7 @@ examples:
speakeasy-default-create-plan:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"plan_id": "free_plan", "group": "", "name": "Free", "add_on": false, "auto_enable": true, "items": [{"feature_id": "messages", "included": 100, "reset": {"interval": "month"}}], "create_in_stripe": true}
responses:
@@ -4968,7 +4968,7 @@ examples:
speakeasy-default-get-plan:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"plan_id": "pro_plan"}
responses:
@@ -4978,7 +4978,7 @@ examples:
speakeasy-default-update-plan:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"plan_id": "pro_plan", "group": "", "name": "Pro Plan (Updated)", "price": {"amount": 15, "interval": "month"}, "create_in_stripe": true, "archived": false}
responses:
@@ -4988,7 +4988,7 @@ examples:
speakeasy-default-delete-plan:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"plan_id": "unused_plan", "all_versions": false}
responses:
@@ -5008,7 +5008,7 @@ examples:
speakeasy-default-preview-multi-attach:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "plans": [{"plan_id": "pro_plan"}, {"plan_id": "addon_seats", "feature_quantities": [{"feature_id": "seats", "quantity": 5}]}], "redirect_mode": "if_required"}
responses:
@@ -5018,7 +5018,7 @@ examples:
speakeasy-default-multi-attach:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "plans": [{"plan_id": "pro_plan"}, {"plan_id": "addon_seats", "feature_quantities": [{"feature_id": "seats", "quantity": 5}]}], "redirect_mode": "if_required"}
responses:
@@ -5028,7 +5028,7 @@ examples:
speakeasy-default-delete-balance:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "feature_id": "api_calls"}
responses:
@@ -5048,7 +5048,7 @@ examples:
speakeasy-default-finalize-lock:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"lock_id": "lock_abc123", "action": "confirm"}
responses:
@@ -5060,7 +5060,7 @@ examples:
speakeasy-default-update-entity:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "entity_id": "seat_42", "billing_controls": {"spend_limits": [{"feature_id": "messages", "enabled": true, "overage_limit": 25}]}}
responses:
@@ -5070,7 +5070,7 @@ examples:
speakeasy-default-get-customer:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123"}
responses:
@@ -5080,7 +5080,7 @@ examples:
speakeasy-default-create-schedule:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"customer_id": "cus_123", "redirect_mode": "if_required", "billing_cycle_anchor": "now", "phases": [{"starts_at": 1735689600000, "plans": [{"plan_id": "trial_plan"}]}, {"starts_at": 1736899200000, "plans": [{"plan_id": "pro_plan"}]}]}
responses:
@@ -5090,10 +5090,10 @@ examples:
speakeasy-default-list-entities:
parameters:
header:
x-api-version: "2.2.0"
x-api-version: "2.3.0"
requestBody:
application/json: {"offset": 0, "limit": 10}
application/json: {"start_cursor": "", "limit": 10}
responses:
"200":
application/json: {"list": [{"id": "seat_42", "name": "Seat 42", "customer_id": "cus_123", "feature_id": "seats", "created_at": 1771409161016, "env": "sandbox", "subscriptions": [{"id": "<id>", "plan_id": "pro_plan", "auto_enable": true, "add_on": false, "status": "active", "past_due": false, "canceled_at": null, "expires_at": null, "trial_ends_at": null, "started_at": 1771431921437, "current_period_start": 1771431921437, "current_period_end": 1771999921437, "quantity": 1}], "purchases": [], "balances": {"messages": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}}, "flags": {"key": {"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "expires_at": null, "feature_id": "dashboard"}}, "invoices": []}], "has_more": false, "offset": 0, "limit": 10, "total": 1, "total_count": 100, "total_filtered_count": 42}
application/json: {"list": [{"id": "seat_42", "name": "Seat 42", "customer_id": "cus_123", "feature_id": "seats", "created_at": 1771409161016, "env": "sandbox", "subscriptions": [{"id": "<id>", "plan_id": "pro_plan", "auto_enable": true, "add_on": false, "status": "active", "past_due": false, "canceled_at": null, "expires_at": null, "trial_ends_at": null, "started_at": 1771431921437, "current_period_start": 1771431921437, "current_period_end": 1771999921437, "quantity": 1}], "purchases": [], "balances": {"messages": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}}, "flags": {"key": {"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "expires_at": null, "feature_id": "dashboard"}}, "invoices": []}], "next_cursor": null}
examplesVersion: 1.0.2

View File

@@ -122,7 +122,7 @@ from autumn_sdk import Autumn
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -144,7 +144,7 @@ from autumn_sdk import Autumn
async def main():
async with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -175,7 +175,7 @@ from autumn_sdk import Autumn
with Autumn(
secret_key="<YOUR_BEARER_TOKEN_HERE>",
x_api_version="2.2.0",
x_api_version="2.3.0",
) as autumn:
res = autumn.check(customer_id="cus_123", feature_id="messages")
@@ -242,7 +242,7 @@ Use this as the primary entrypoint before billing operations so the customer rec
* [get](docs/sdks/customers/README.md#get) - Fetches a customer by ID, optionally expanding related data such as invoices or entities.
Use this when you know the customer exists or assert they exist without creating them.
* [list](docs/sdks/customers/README.md#list) - Lists customers with pagination and optional filters.
* [list](docs/sdks/customers/README.md#list) - Lists customers with cursor pagination and optional filters. Pass `start_cursor: ""` (or omit) for the first page; use `next_cursor` from a prior response for subsequent pages.
* [update](docs/sdks/customers/README.md#update) - Updates an existing customer by ID.
* [delete](docs/sdks/customers/README.md#delete) - Deletes a customer by ID.
@@ -315,7 +315,7 @@ from autumn_sdk.utils import BackoffStrategy, RetryConfig
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -335,7 +335,7 @@ from autumn_sdk.utils import BackoffStrategy, RetryConfig
with Autumn(
retry_config=RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False),
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -366,7 +366,7 @@ from autumn_sdk import Autumn, errors
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
res = None
@@ -420,7 +420,7 @@ from autumn_sdk import Autumn
with Autumn(
server_url="https://api.useautumn.com",
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -525,7 +525,7 @@ from autumn_sdk import Autumn
def main():
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
# Rest of application here...
@@ -535,7 +535,7 @@ def main():
async def amain():
async with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
# Rest of application here...

View File

@@ -5,7 +5,7 @@ from autumn_sdk import Autumn
with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:
@@ -27,7 +27,7 @@ from autumn_sdk import Autumn
async def main():
async with Autumn(
x_api_version="2.2.0",
x_api_version="2.3.0",
secret_key="<YOUR_BEARER_TOKEN_HERE>",
) as autumn:

View File

@@ -4,9 +4,9 @@ import importlib.metadata
__title__: str = "autumn-sdk"
__version__: str = "0.4.18"
__openapi_doc_version__: str = "2.2.0"
__openapi_doc_version__: str = "2.3.0"
__gen_version__: str = "2.882.0"
__user_agent__: str = "speakeasy-sdk/python 0.4.18 2.882.0 2.2.0 autumn-sdk"
__user_agent__: str = "speakeasy-sdk/python 0.4.18 2.882.0 2.3.0 autumn-sdk"
try:
if __package__ is not None:

View File

@@ -697,7 +697,7 @@ class Balances(BaseSDK):
self,
*,
lock_id: str,
action: models.Action,
action: models.FinalizeLockAction,
override_value: Optional[float] = None,
properties: Optional[Dict[str, Any]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
@@ -798,7 +798,7 @@ class Balances(BaseSDK):
self,
*,
lock_id: str,
action: models.Action,
action: models.FinalizeLockAction,
override_value: Optional[float] = None,
properties: Optional[Dict[str, Any]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,

View File

@@ -3,9 +3,9 @@
from .basesdk import BaseSDK
from autumn_sdk import errors, models, utils
from autumn_sdk._hooks import HookContext
from autumn_sdk.types import BaseModel, Nullable, OptionalNullable, UNSET
from autumn_sdk.types import Nullable, OptionalNullable, UNSET
from autumn_sdk.utils.unmarshal_json_response import unmarshal_json_response
from typing import Any, Dict, List, Mapping, Optional, Union, cast
from typing import Any, Dict, List, Mapping, Optional, Union
class Customers(BaseSDK):
@@ -480,17 +480,29 @@ class Customers(BaseSDK):
def list(
self,
*,
request: Optional[
Union[models.ListCustomersParams, models.ListCustomersParamsTypedDict]
start_cursor: Optional[str] = "",
limit: Optional[int] = 50,
plans: Optional[
Union[
List[models.ListCustomersPlan], List[models.ListCustomersPlanTypedDict]
]
] = None,
subscription_status: Optional[models.ListCustomersSubscriptionStatus] = None,
search: Optional[str] = None,
processors: Optional[List[models.ListCustomersProcessor]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> models.ListCustomersResponse:
r"""Lists customers with pagination and optional filters.
r"""Lists customers with cursor pagination and optional filters. Pass `start_cursor: \"\"` (or omit) for the first page; use `next_cursor` from a prior response for subsequent pages.
:param request: The request object to send.
:param start_cursor: Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
:param limit: Number of items to return. Default 50, hard ceiling 5000.
:param plans: Filter by plan ID and version. Returns customers with active subscriptions to this plan.
:param subscription_status: Filter by customer product status. Defaults to active and scheduled.
:param search: Search customers by id, name, or email.
:param processors: Filter by customer processor type (stripe, revenuecat, vercel).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -506,9 +518,16 @@ class Customers(BaseSDK):
else:
base_url = self._get_url(base_url, url_variables)
if not isinstance(request, BaseModel):
request = utils.unmarshal(request, Optional[models.ListCustomersParams])
request = cast(Optional[models.ListCustomersParams], request)
request = models.ListCustomersParams(
start_cursor=start_cursor,
limit=limit,
plans=utils.get_pydantic_model(
plans, Optional[List[models.ListCustomersPlan]]
),
subscription_status=subscription_status,
search=search,
processors=processors,
)
req = self._build_request(
method="POST",
@@ -516,7 +535,7 @@ class Customers(BaseSDK):
base_url=base_url,
url_variables=url_variables,
request=request,
request_body_required=False,
request_body_required=True,
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
@@ -527,7 +546,7 @@ class Customers(BaseSDK):
),
security=self.sdk_configuration.security,
get_serialized_body=lambda: utils.serialize_request_body(
request, False, True, "json", Optional[models.ListCustomersParams]
request, False, False, "json", models.ListCustomersParams
),
allow_empty_value=None,
timeout_ms=timeout_ms,
@@ -572,17 +591,29 @@ class Customers(BaseSDK):
async def list_async(
self,
*,
request: Optional[
Union[models.ListCustomersParams, models.ListCustomersParamsTypedDict]
start_cursor: Optional[str] = "",
limit: Optional[int] = 50,
plans: Optional[
Union[
List[models.ListCustomersPlan], List[models.ListCustomersPlanTypedDict]
]
] = None,
subscription_status: Optional[models.ListCustomersSubscriptionStatus] = None,
search: Optional[str] = None,
processors: Optional[List[models.ListCustomersProcessor]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> models.ListCustomersResponse:
r"""Lists customers with pagination and optional filters.
r"""Lists customers with cursor pagination and optional filters. Pass `start_cursor: \"\"` (or omit) for the first page; use `next_cursor` from a prior response for subsequent pages.
:param request: The request object to send.
:param start_cursor: Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
:param limit: Number of items to return. Default 50, hard ceiling 5000.
:param plans: Filter by plan ID and version. Returns customers with active subscriptions to this plan.
:param subscription_status: Filter by customer product status. Defaults to active and scheduled.
:param search: Search customers by id, name, or email.
:param processors: Filter by customer processor type (stripe, revenuecat, vercel).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -598,9 +629,16 @@ class Customers(BaseSDK):
else:
base_url = self._get_url(base_url, url_variables)
if not isinstance(request, BaseModel):
request = utils.unmarshal(request, Optional[models.ListCustomersParams])
request = cast(Optional[models.ListCustomersParams], request)
request = models.ListCustomersParams(
start_cursor=start_cursor,
limit=limit,
plans=utils.get_pydantic_model(
plans, Optional[List[models.ListCustomersPlan]]
),
subscription_status=subscription_status,
search=search,
processors=processors,
)
req = self._build_request_async(
method="POST",
@@ -608,7 +646,7 @@ class Customers(BaseSDK):
base_url=base_url,
url_variables=url_variables,
request=request,
request_body_required=False,
request_body_required=True,
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
@@ -619,7 +657,7 @@ class Customers(BaseSDK):
),
security=self.sdk_configuration.security,
get_serialized_body=lambda: utils.serialize_request_body(
request, False, True, "json", Optional[models.ListCustomersParams]
request, False, False, "json", models.ListCustomersParams
),
allow_empty_value=None,
timeout_ms=timeout_ms,

View File

@@ -3,9 +3,9 @@
from .basesdk import BaseSDK
from autumn_sdk import errors, models, utils
from autumn_sdk._hooks import HookContext
from autumn_sdk.types import BaseModel, OptionalNullable, UNSET
from autumn_sdk.types import OptionalNullable, UNSET
from autumn_sdk.utils.unmarshal_json_response import unmarshal_json_response
from typing import Mapping, Optional, Union, cast
from typing import List, Mapping, Optional, Union
class Entities(BaseSDK):
@@ -438,9 +438,14 @@ class Entities(BaseSDK):
def list(
self,
*,
request: Optional[
Union[models.ListEntitiesParams, models.ListEntitiesParamsTypedDict]
start_cursor: Optional[str] = "",
limit: Optional[int] = 50,
plans: Optional[
Union[List[models.ListEntitiesPlan], List[models.ListEntitiesPlanTypedDict]]
] = None,
subscription_status: Optional[models.ListEntitiesSubscriptionStatus] = None,
search: Optional[str] = None,
processors: Optional[List[models.ListEntitiesProcessor]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -450,7 +455,12 @@ class Entities(BaseSDK):
Use this to page through entities globally, including filtering by plans inherited from parent customers or attached directly to entities.
:param request: The request object to send.
:param start_cursor: Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
:param limit: Number of items to return. Default 50, hard ceiling 5000.
:param plans: Filter by plan ID and version. Returns entities with active subscriptions to this plan, including plans inherited from the parent customer.
:param subscription_status: Filter customer products used for entity hydration and plan matching. Defaults to active and scheduled.
:param search: Search entities by id or name.
:param processors: Filter by parent customer processor type (stripe, revenuecat, vercel).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -466,9 +476,16 @@ class Entities(BaseSDK):
else:
base_url = self._get_url(base_url, url_variables)
if not isinstance(request, BaseModel):
request = utils.unmarshal(request, Optional[models.ListEntitiesParams])
request = cast(Optional[models.ListEntitiesParams], request)
request = models.ListEntitiesParams(
start_cursor=start_cursor,
limit=limit,
plans=utils.get_pydantic_model(
plans, Optional[List[models.ListEntitiesPlan]]
),
subscription_status=subscription_status,
search=search,
processors=processors,
)
req = self._build_request(
method="POST",
@@ -476,7 +493,7 @@ class Entities(BaseSDK):
base_url=base_url,
url_variables=url_variables,
request=request,
request_body_required=False,
request_body_required=True,
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
@@ -487,7 +504,7 @@ class Entities(BaseSDK):
),
security=self.sdk_configuration.security,
get_serialized_body=lambda: utils.serialize_request_body(
request, False, True, "json", Optional[models.ListEntitiesParams]
request, False, False, "json", models.ListEntitiesParams
),
allow_empty_value=None,
timeout_ms=timeout_ms,
@@ -532,9 +549,14 @@ class Entities(BaseSDK):
async def list_async(
self,
*,
request: Optional[
Union[models.ListEntitiesParams, models.ListEntitiesParamsTypedDict]
start_cursor: Optional[str] = "",
limit: Optional[int] = 50,
plans: Optional[
Union[List[models.ListEntitiesPlan], List[models.ListEntitiesPlanTypedDict]]
] = None,
subscription_status: Optional[models.ListEntitiesSubscriptionStatus] = None,
search: Optional[str] = None,
processors: Optional[List[models.ListEntitiesProcessor]] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
@@ -544,7 +566,12 @@ class Entities(BaseSDK):
Use this to page through entities globally, including filtering by plans inherited from parent customers or attached directly to entities.
:param request: The request object to send.
:param start_cursor: Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
:param limit: Number of items to return. Default 50, hard ceiling 5000.
:param plans: Filter by plan ID and version. Returns entities with active subscriptions to this plan, including plans inherited from the parent customer.
:param subscription_status: Filter customer products used for entity hydration and plan matching. Defaults to active and scheduled.
:param search: Search entities by id or name.
:param processors: Filter by parent customer processor type (stripe, revenuecat, vercel).
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -560,9 +587,16 @@ class Entities(BaseSDK):
else:
base_url = self._get_url(base_url, url_variables)
if not isinstance(request, BaseModel):
request = utils.unmarshal(request, Optional[models.ListEntitiesParams])
request = cast(Optional[models.ListEntitiesParams], request)
request = models.ListEntitiesParams(
start_cursor=start_cursor,
limit=limit,
plans=utils.get_pydantic_model(
plans, Optional[List[models.ListEntitiesPlan]]
),
subscription_status=subscription_status,
search=search,
processors=processors,
)
req = self._build_request_async(
method="POST",
@@ -570,7 +604,7 @@ class Entities(BaseSDK):
base_url=base_url,
url_variables=url_variables,
request=request,
request_body_required=False,
request_body_required=True,
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
@@ -581,7 +615,7 @@ class Entities(BaseSDK):
),
security=self.sdk_configuration.security,
get_serialized_body=lambda: utils.serialize_request_body(
request, False, True, "json", Optional[models.ListEntitiesParams]
request, False, False, "json", models.ListEntitiesParams
),
allow_empty_value=None,
timeout_ms=timeout_ms,

View File

@@ -12,8 +12,8 @@ class Events(BaseSDK):
def list(
self,
*,
offset: Optional[int] = 0,
limit: Optional[int] = 100,
start_cursor: Optional[str] = "",
limit: Optional[int] = 50,
customer_id: Optional[str] = None,
entity_id: Optional[str] = None,
feature_id: Optional[
@@ -29,8 +29,8 @@ class Events(BaseSDK):
) -> models.ListEventsResponse:
r"""List usage events for your organization. Filter by customer, feature, or time range.
:param offset: Number of items to skip
:param limit: Number of items to return. Default 100, max 1000.
:param start_cursor: Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
:param limit: Number of items to return. Default 50, hard ceiling 5000.
:param customer_id: Filter events by customer ID
:param entity_id: Filter events by entity ID (e.g., per-seat or per-resource)
:param feature_id: Filter by specific feature ID(s)
@@ -51,7 +51,7 @@ class Events(BaseSDK):
base_url = self._get_url(base_url, url_variables)
request = models.EventsListParams(
offset=offset,
start_cursor=start_cursor,
limit=limit,
customer_id=customer_id,
entity_id=entity_id,
@@ -123,8 +123,8 @@ class Events(BaseSDK):
async def list_async(
self,
*,
offset: Optional[int] = 0,
limit: Optional[int] = 100,
start_cursor: Optional[str] = "",
limit: Optional[int] = 50,
customer_id: Optional[str] = None,
entity_id: Optional[str] = None,
feature_id: Optional[
@@ -140,8 +140,8 @@ class Events(BaseSDK):
) -> models.ListEventsResponse:
r"""List usage events for your organization. Filter by customer, feature, or time range.
:param offset: Number of items to skip
:param limit: Number of items to return. Default 100, max 1000.
:param start_cursor: Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
:param limit: Number of items to return. Default 50, hard ceiling 5000.
:param customer_id: Filter events by customer ID
:param entity_id: Filter events by entity ID (e.g., per-seat or per-resource)
:param feature_id: Filter by specific feature ID(s)
@@ -162,7 +162,7 @@ class Events(BaseSDK):
base_url = self._get_url(base_url, url_variables)
request = models.EventsListParams(
offset=offset,
start_cursor=start_cursor,
limit=limit,
customer_id=customer_id,
entity_id=entity_id,

View File

@@ -644,9 +644,9 @@ if TYPE_CHECKING:
DeletePlanResponseTypedDict,
)
from .finalizelockop import (
Action,
FinalizeBalanceParams,
FinalizeBalanceParamsTypedDict,
FinalizeLockAction,
FinalizeLockGlobals,
FinalizeLockGlobalsTypedDict,
FinalizeLockResponse,
@@ -1773,7 +1773,6 @@ if TYPE_CHECKING:
from . import internal
__all__ = [
"Action",
"AggregateEventsCustomRange",
"AggregateEventsCustomRangeTypedDict",
"AggregateEventsFeatureID",
@@ -2312,6 +2311,7 @@ __all__ = [
"FeatureType2",
"FinalizeBalanceParams",
"FinalizeBalanceParamsTypedDict",
"FinalizeLockAction",
"FinalizeLockGlobals",
"FinalizeLockGlobalsTypedDict",
"FinalizeLockResponse",
@@ -4058,9 +4058,9 @@ _dynamic_imports: dict[str, str] = {
"DeletePlanParamsTypedDict": ".deleteplanop",
"DeletePlanResponse": ".deleteplanop",
"DeletePlanResponseTypedDict": ".deleteplanop",
"Action": ".finalizelockop",
"FinalizeBalanceParams": ".finalizelockop",
"FinalizeBalanceParamsTypedDict": ".finalizelockop",
"FinalizeLockAction": ".finalizelockop",
"FinalizeLockGlobals": ".finalizelockop",
"FinalizeLockGlobalsTypedDict": ".finalizelockop",
"FinalizeLockResponse": ".finalizelockop",

View File

@@ -18,7 +18,7 @@ class AggregateEventsGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -26,7 +26,7 @@ class AttachGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -26,7 +26,7 @@ class BillingUpdateGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -27,7 +27,7 @@ class CheckGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -24,7 +24,7 @@ class CreateBalanceGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -28,7 +28,7 @@ class CreateEntityGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -25,7 +25,7 @@ class CreateFeatureGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -25,7 +25,7 @@ class CreatePlanGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -18,7 +18,7 @@ class CreateReferralCodeGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -26,7 +26,7 @@ class CreateScheduleGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -18,7 +18,7 @@ class DeleteBalanceGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -18,7 +18,7 @@ class DeleteCustomerGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -18,7 +18,7 @@ class DeleteEntityGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

View File

@@ -18,7 +18,7 @@ class DeleteFeatureGlobals(BaseModel):
Optional[str],
pydantic.Field(alias="x-api-version"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = "2.2.0"
] = "2.3.0"
@model_serializer(mode="wrap")
def serialize_model(self, handler):

Some files were not shown because too many files have changed in this diff Show More