| # OpenMeter Python SDK |
|
|
| [On PyPI](https://pypi.org/project/openmeter) |
|
|
| This package is generated by `@typespec/http-client-python` with Typespec. |
|
|
| ## Prerequisites |
|
|
| - Python 3.9 or later is required to use this package. |
|
|
| ## Install |
|
|
| > The Python SDK is in preview mode. |
|
|
| ```sh |
| pip install --pre openmeter |
| # or using an exact version |
| pip install openmeter==1.0.0bXXX |
| ``` |
|
|
| ## Examples |
|
|
| ### Setup |
|
|
| #### Synchronous Client |
|
|
| ```python |
| from openmeter import Client |
| |
| client = Client( |
| endpoint="https://openmeter.cloud", |
| token="your-api-token", |
| ) |
| ``` |
|
|
| #### Async Client |
|
|
| ```python |
| from openmeter.aio import Client |
| |
| client = Client( |
| endpoint="https://openmeter.cloud", |
| token="your-api-token", |
| ) |
| ``` |
|
|
| ### Ingest an Event |
|
|
| #### Synchronous |
|
|
| ```python |
| import datetime |
| import uuid |
| |
| from openmeter.models import Event |
| |
| # Create an Event instance (following CloudEvents specification) |
| event = Event( |
| id=str(uuid.uuid4()), |
| source="my-app", |
| specversion="1.0", |
| type="prompt", |
| subject="customer-1", |
| time=datetime.datetime.now(datetime.timezone.utc), |
| data={ |
| "tokens": 100, |
| "model": "gpt-4o", |
| "type": "input", |
| }, |
| ) |
| |
| # Ingest the event |
| client.events.ingest_event(event) |
| ``` |
|
|
| #### Async |
|
|
| ```python |
| import datetime |
| import uuid |
| import asyncio |
| |
| from openmeter.aio import Client |
| from openmeter.models import Event |
| |
| async def main(): |
| async with Client( |
| endpoint="https://openmeter.cloud", |
| token="your-api-token", |
| ) as client: |
| # Create an Event instance (following CloudEvents specification) |
| event = Event( |
| id=str(uuid.uuid4()), |
| source="my-app", |
| specversion="1.0", |
| type="prompt", |
| subject="customer-1", |
| time=datetime.datetime.now(datetime.timezone.utc), |
| data={ |
| "tokens": 100, |
| "model": "gpt-4o", |
| "type": "input", |
| }, |
| ) |
| |
| # Ingest the event |
| await client.events.ingest_event(event) |
| |
| asyncio.run(main()) |
| ``` |
|
|
| ### Query Meter |
|
|
| #### Synchronous |
|
|
| ```python |
| from openmeter.models import MeterQueryResult |
| |
| # Query total values |
| r: MeterQueryResult = client.meters.query_json(meter_id_or_slug="tokens_total") |
| print("Query total values:", r.data[0].value) |
| ``` |
|
|
| #### Async |
|
|
| ```python |
| import asyncio |
| |
| from openmeter.aio import Client |
| from openmeter.models import MeterQueryResult |
| |
| async def main(): |
| async with Client( |
| endpoint="https://openmeter.cloud", |
| token="your-api-token", |
| ) as client: |
| # Query total values |
| r: MeterQueryResult = await client.meters.query_json( |
| meter_id_or_slug="tokens_total" |
| ) |
| print("Query total values:", r.data[0].value) |
| |
| asyncio.run(main()) |
| ``` |
|
|
| ## Client API Reference |
|
|
| The OpenMeter Python SDK provides a comprehensive client interface organized into logical operation groups. Below is a complete reference of all available methods. |
|
|
| ### Overview |
|
|
| | Namespace | Operation | Method | Description | |
| | ---------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | |
| | **Events** | | | Track usage by ingesting events | |
| | | Create | `client.events.ingest_event(event)` | Ingest a single event | |
| | | Create | `client.events.ingest_events(events)` | Ingest batch of events | |
| | | Create | `client.events.ingest_events_json(events_json)` | Ingest events from JSON | |
| | | Read | `client.events.list(**kwargs)` | List ingested events with filtering | |
| | | Read | `client.events_v2.list(**kwargs)` | List ingested events with advanced filtering (V2) | |
| | **Meters** | | | Track and aggregate usage data from events | |
| | | Create | `client.meters.create(meter)` | Create a new meter | |
| | | Read | `client.meters.get(meter_id_or_slug)` | Get a meter by ID or slug | |
| | | Read | `client.meters.list(**kwargs)` | List all meters | |
| | | Read | `client.meters.query_json(meter_id_or_slug, **kwargs)` | Query usage data in JSON format | |
| | | Read | `client.meters.query_csv(meter_id_or_slug, **kwargs)` | Query usage data in CSV format | |
| | | Read | `client.meters.query(meter_id_or_slug, **kwargs)` | Query usage data | |
| | | Read | `client.meters.list_subjects(meter_id_or_slug, **kwargs)` | List subjects for a meter | |
| | | Read | `client.meters.list_group_by_values(meter_id_or_slug, **kwargs)` | List group-by values for a meter | |
| | | Update | `client.meters.update(meter_id_or_slug, meter)` | Update a meter by ID or slug | |
| | | Delete | `client.meters.delete(meter_id_or_slug)` | Delete a meter by ID or slug | |
| | **Subjects** | | | Manage entities that consume resources | |
| | | Create | `client.subjects.upsert(subjects)` | Create or update one or multiple subjects | |
| | | Read | `client.subjects.get(subject_id_or_key)` | Get a subject by ID or key | |
| | | Read | `client.subjects.list()` | List all subjects | |
| | | Delete | `client.subjects.delete(subject_id_or_key)` | Delete a subject by ID or key | |
| | **Customers** | | | Manage customer information and lifecycles | |
| | | Create | `client.customers.create(customer)` | Create a new customer | |
| | | Read | `client.customers.get(customer_id_or_key, **kwargs)` | Get a customer by ID or key | |
| | | Read | `client.customers.list(**kwargs)` | List all customers | |
| | | Read | `client.customers.list_customer_subscriptions(customer_id_or_key, **kwargs)` | List customer subscriptions | |
| | | Update | `client.customers.update(customer_id_or_key, customer)` | Update a customer | |
| | | Delete | `client.customers.delete(customer_id_or_key)` | Delete a customer | |
| | **Customer (Single)** | | | Customer-specific operations | |
| | | Read | `client.customer.get_customer_access(customer_id_or_key)` | Get customer access information | |
| | **Customer Apps** | | | Manage customer app integrations | |
| | | Read | `client.customer_apps.list_app_data(customer_id_or_key, **kwargs)` | List app data for a customer | |
| | | Update | `client.customer_apps.upsert_app_data(customer_id_or_key, app_data)` | Upsert app data for a customer | |
| | | Delete | `client.customer_apps.delete_app_data(customer_id_or_key, app_id)` | Delete app data for a customer | |
| | **Customer Stripe** | | | Manage Stripe integration for customers | |
| | | Read | `client.customer_stripe.get(customer_id_or_key)` | Get Stripe customer data | |
| | | Update | `client.customer_stripe.upsert(customer_id_or_key, data)` | Upsert Stripe customer data | |
| | | Create | `client.customer_stripe.create_portal_session(customer_id_or_key, **kwargs)` | Create a Stripe customer portal session | |
| | **Customer Entitlement** | | | Single customer entitlement operations | |
| | | Read | `client.customer_entitlement.get_customer_entitlement_value(customer_id_or_key, **kwargs)` | Get customer entitlement value | |
| | **Customer Overrides** | | | Manage customer-specific pricing overrides | |
| | | Read | `client.customer_overrides.list(customer_id_or_key)` | List customer overrides | |
| | | Read | `client.customer_overrides.get(customer_id_or_key, override_id)` | Get a customer override | |
| | | Update | `client.customer_overrides.upsert(customer_id_or_key, override)` | Upsert a customer override | |
| | | Delete | `client.customer_overrides.delete(customer_id_or_key, override_id)` | Delete a customer override | |
| | **Features** | | | Define application capabilities and services | |
| | | Create | `client.features.create(feature)` | Create a new feature | |
| | | Read | `client.features.get(feature_id)` | Get a feature by ID | |
| | | Read | `client.features.list(**kwargs)` | List all features | |
| | | Delete | `client.features.delete(feature_id)` | Delete a feature by ID | |
| | **Plans** | | | Manage subscription plans and pricing | |
| | | Create | `client.plans.create(request)` | Create a new plan | |
| | | Read | `client.plans.get(plan_id, **kwargs)` | Get a plan by ID | |
| | | Read | `client.plans.list(**kwargs)` | List all plans | |
| | | Update | `client.plans.update(plan_id, body)` | Update a plan | |
| | | Delete | `client.plans.delete(plan_id)` | Delete a plan by ID | |
| | | Other | `client.plans.publish(plan_id)` | Publish a plan | |
| | | Other | `client.plans.archive(plan_id)` | Archive a plan version | |
| | | Other | `client.plans.next(plan_id_or_key)` | Create new draft plan version | |
| | **Plan Addons** | | | Manage addons assigned to plans | |
| | | Create | `client.plan_addons.create(plan_id, body)` | Create addon assignment for plan | |
| | | Read | `client.plan_addons.get(plan_id, plan_addon_id)` | Get addon assignment for plan | |
| | | Read | `client.plan_addons.list(plan_id, **kwargs)` | List addon assignments for plan | |
| | | Update | `client.plan_addons.update(plan_id, plan_addon_id, body)` | Update addon assignment for plan | |
| | | Delete | `client.plan_addons.delete(plan_id, plan_addon_id)` | Delete addon assignment for plan | |
| | **Addons** | | | Manage standalone addons available across plans | |
| | | Create | `client.addons.create(request)` | Create a new addon | |
| | | Read | `client.addons.get(addon_id, **kwargs)` | Get an addon by ID | |
| | | Read | `client.addons.list(**kwargs)` | List all addons | |
| | | Update | `client.addons.update(addon_id, request)` | Update an addon | |
| | | Delete | `client.addons.delete(addon_id)` | Delete an addon by ID | |
| | | Other | `client.addons.publish(addon_id)` | Publish an addon | |
| | | Other | `client.addons.archive(addon_id)` | Archive an addon | |
| | **Subscriptions** | | | Manage customer subscriptions | |
| | | Create | `client.subscriptions.create(body)` | Create a new subscription | |
| | | Read | `client.subscriptions.get_expanded(subscription_id, **kwargs)` | Get a subscription with expanded details | |
| | | Update | `client.subscriptions.edit(subscription_id, body)` | Edit a subscription | |
| | | Update | `client.subscriptions.change(subscription_id, body)` | Change a subscription | |
| | | Update | `client.subscriptions.migrate(subscription_id, body)` | Migrate subscription to a new plan version | |
| | | Update | `client.subscriptions.restore(subscription_id)` | Restore a canceled subscription | |
| | | Delete | `client.subscriptions.cancel(subscription_id, body)` | Cancel a subscription | |
| | | Delete | `client.subscriptions.delete(subscription_id)` | Delete a subscription | |
| | | Other | `client.subscriptions.unschedule_cancelation(subscription_id)` | Unschedule a subscription cancelation | |
| | **Subscription Addons** | | | Manage addons on subscriptions | |
| | | Create | `client.subscription_addons.create(subscription_id, body)` | Add an addon to a subscription | |
| | | Read | `client.subscription_addons.get(subscription_id, subscription_addon_id)` | Get a subscription addon | |
| | | Read | `client.subscription_addons.list(subscription_id, **kwargs)` | List addons on a subscription | |
| | | Update | `client.subscription_addons.update(subscription_id, subscription_addon_id, body)` | Update a subscription addon | |
| | **Entitlements** | | | Admin entitlements management | |
| | | Read | `client.entitlements.list(**kwargs)` | List all entitlements (admin) | |
| | | Read | `client.entitlements.get(entitlement_id)` | Get an entitlement by ID | |
| | **Entitlements V2** | | | V2 Admin entitlements management | |
| | | Read | `client.entitlements_v2.list(**kwargs)` | List all entitlements V2 (admin) | |
| | | Read | `client.entitlements_v2.get(entitlement_id_or_feature_key, **kwargs)` | Get an entitlement V2 by ID or feature key | |
| | **Customer Entitlements V2** | | | Manage customer entitlements (V2) | |
| | | Create | `client.customer_entitlements_v2.post(customer_id_or_key, body)` | Create a customer entitlement | |
| | | Read | `client.customer_entitlements_v2.list(customer_id_or_key, **kwargs)` | List customer entitlements | |
| | | Read | `client.customer_entitlements_v2.get(customer_id_or_key, entitlement_id_or_feature_key)` | Get a customer entitlement | |
| | | Delete | `client.customer_entitlements_v2.delete(customer_id_or_key, entitlement_id)` | Delete a customer entitlement | |
| | | Update | `client.customer_entitlements_v2.override(customer_id_or_key, entitlement_id_or_feature_key, override)` | Override a customer entitlement | |
| | **Customer Entitlement V2** | | | Single customer entitlement operations (V2) | |
| | | Read | `client.customer_entitlement_v2.get_grants(customer_id_or_key, entitlement_id_or_feature_key, **kwargs)` | List grants for a customer entitlement | |
| | | Read | `client.customer_entitlement_v2.get_customer_entitlement_value(customer_id_or_key, entitlement_id_or_feature_key, **kwargs)` | Get customer entitlement value | |
| | | Read | `client.customer_entitlement_v2.get_customer_entitlement_history(customer_id_or_key, entitlement_id_or_feature_key, **kwargs)` | Get customer entitlement history | |
| | | Create | `client.customer_entitlement_v2.create_customer_entitlement_grant(customer_id_or_key, entitlement_id_or_feature_key, grant)` | Create a grant for customer entitlement | |
| | | Update | `client.customer_entitlement_v2.reset_customer_entitlement(customer_id_or_key, entitlement_id, **kwargs)` | Reset customer entitlement usage | |
| | **Grants** | | | Admin grants management | |
| | | Read | `client.grants.list(**kwargs)` | List all grants (admin) | |
| | | Delete | `client.grants.delete(grant_id)` | Delete (void) a grant | |
| | **Grants V2** | | | V2 Admin grants management | |
| | | Read | `client.grants_v2.list(**kwargs)` | List all grants V2 (admin) | |
| | **Billing Profiles** | | | Manage billing profiles | |
| | | Create | `client.billing_profiles.create(profile)` | Create a billing profile | |
| | | Read | `client.billing_profiles.get(id)` | Get a billing profile by ID | |
| | | Read | `client.billing_profiles.list(**kwargs)` | List billing profiles | |
| | | Update | `client.billing_profiles.update(id, profile)` | Update a billing profile | |
| | | Delete | `client.billing_profiles.delete(id)` | Delete a billing profile | |
| | **Invoices** | | | Manage invoices | |
| | | Read | `client.invoices.list(**kwargs)` | List invoices | |
| | | Other | `client.invoices.invoice_pending_lines_action(customer_id, **kwargs)` | Invoice pending lines for customer | |
| | **Invoice** | | | Single invoice operations | |
| | | Read | `client.invoice.get_invoice(id, **kwargs)` | Get an invoice by ID | |
| | | Update | `client.invoice.update_invoice(id, invoice)` | Update an invoice | |
| | | Delete | `client.invoice.delete_invoice(id)` | Delete an invoice | |
| | | Other | `client.invoice.advance_action(id)` | Advance invoice to next status | |
| | | Other | `client.invoice.approve_action(id)` | Approve an invoice | |
| | | Other | `client.invoice.retry_action(id, body)` | Retry advancing invoice after failure | |
| | | Other | `client.invoice.void_invoice_action(id)` | Void an invoice | |
| | | Other | `client.invoice.recalculate_tax_action(id)` | Recalculate invoice tax amounts | |
| | | Other | `client.invoice.snapshot_quantities_action(id)` | Snapshot invoice quantities | |
| | **Customer Invoice** | | | Customer-specific invoice operations | |
| | | Create | `client.customer_invoice.create_pending_invoice_line(customer_id, body)` | Create pending invoice line for customer | |
| | | Other | `client.customer_invoice.simulate_invoice(customer_id, **kwargs)` | Simulate an invoice for a customer | |
| | **Apps** | | | Manage integrations and app installations | |
| | | Read | `client.apps.list(**kwargs)` | List installed apps | |
| | | Read | `client.apps.get(id)` | Get an app by ID | |
| | | Update | `client.apps.update(id, app)` | Update an app | |
| | | Delete | `client.apps.uninstall(id)` | Uninstall an app | |
| | **App Stripe** | | | Stripe app integration | |
| | | Create | `client.app_stripe.webhook(id, body)` | Handle Stripe webhook event | |
| | | Update | `client.app_stripe.update_stripe_api_key(id, request)` | Update Stripe API key | |
| | | Create | `client.app_stripe.create_checkout_session(body)` | Create Stripe checkout session | |
| | **App Custom Invoicing** | | | Custom invoicing app integration | |
| | | Other | `client.app_custom_invoicing.draft_syncronized(id, invoice_number, **kwargs)` | Notify when draft invoice synchronized | |
| | | Other | `client.app_custom_invoicing.finalized(id, invoice_number, **kwargs)` | Notify when invoice finalized | |
| | | Other | `client.app_custom_invoicing.payment_status(id, invoice_number, body)` | Update invoice payment status | |
| | **Marketplace** | | | App marketplace operations | |
| | | Read | `client.marketplace.list(**kwargs)` | List marketplace apps | |
| | | Read | `client.marketplace.get(app_type)` | Get marketplace app | |
| | | Read | `client.marketplace.get_o_auth2_install_url(app_type, **kwargs)` | Get OAuth2 install URL | |
| | | Create | `client.marketplace.authorize_o_auth2_install(app_type, **kwargs)` | Authorize OAuth2 installation | |
| | | Create | `client.marketplace.install_with_api_key(app_type, body)` | Install app with API key | |
| | | Create | `client.marketplace.install(app_type, body)` | Install marketplace app | |
| | **Notification Channels** | | | Manage notification channels | |
| | | Create | `client.notification_channels.create(channel)` | Create a notification channel | |
| | | Read | `client.notification_channels.get(channel_id)` | Get a notification channel by ID | |
| | | Read | `client.notification_channels.list(**kwargs)` | List notification channels | |
| | | Update | `client.notification_channels.update(channel_id, channel)` | Update a notification channel | |
| | | Delete | `client.notification_channels.delete(channel_id)` | Delete a notification channel | |
| | **Notification Rules** | | | Manage notification rules | |
| | | Create | `client.notification_rules.create(rule)` | Create a notification rule | |
| | | Read | `client.notification_rules.get(rule_id)` | Get a notification rule by ID | |
| | | Read | `client.notification_rules.list(**kwargs)` | List notification rules | |
| | | Update | `client.notification_rules.update(rule_id, rule)` | Update a notification rule | |
| | | Delete | `client.notification_rules.delete(rule_id)` | Delete a notification rule | |
| | | Other | `client.notification_rules.test(rule_id)` | Test a notification rule | |
| | **Notification Events** | | | View notification events | |
| | | Read | `client.notification_events.get(event_id)` | Get a notification event by ID | |
| | | Read | `client.notification_events.list(**kwargs)` | List notification events | |
| | **Progress** | | | Track long-running operations | |
| | | Read | `client.progress.get_progress(id)` | Get progress of a long-running operation | |
| | **Currencies** | | | Currency information | |
| | | Read | `client.currencies.list_currencies()` | List all supported currencies | |
| | **Debug** | | | Debug utilities for monitoring and troubleshooting | |
| | | Read | `client.debug.metrics()` | Get event ingestion metrics | |
|
|