Stripe webhook (standard)
/api/v1/payments/stripe/webhookpayments:createor user sessionReceive and process Stripe webhook events for the standard (non-Connect) account. Called by Stripe.
Error responses
400Invalid signature or malformed payload
Products, prices, checkout and enrollment via the open payments API, including bring-your-own provider.
/api/v1/payments/stripe/webhookpayments:createor user sessionReceive and process Stripe webhook events for the standard (non-Connect) account. Called by Stripe.
400 Invalid signature or malformed payload/api/v1/payments/stripe/webhook/connectpayments:createor user sessionReceive and process Stripe webhook events for Stripe Connect / Express accounts. Called by Stripe.
400 Invalid signature or malformed payload/api/v1/payments/{org_id}/configpayments:reador user sessionReturn the payments configuration(s) for the organization.
org_idintegerrequiredPaymentsConfigRead[] — List of payments configs for the organization.
enabledbooleanactivebooleanproviderPaymentProviderEnumstripemodePaymentsModeEnumstandardexpressprovider_specific_idstring | nullprovider_configProvider Configidintegerrequiredorg_idintegerrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to view payments config for this org422 Validation Error — HTTPValidationError[
{
"enabled": true,
"active": false,
"provider": "stripe",
"mode": "standard",
"provider_specific_id": "string",
"provider_config": {},
"id": 1,
"org_id": 1,
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}
]/api/v1/payments/{org_id}/configpayments:createor user sessionInitialize a payments configuration for an organization with the given provider. Requires an org admin to be authenticated.
org_idintegerrequiredproviderstringrequiredPaymentsConfig — Newly created payments config for the org.
enabledbooleanactivebooleanproviderPaymentProviderEnumstripemodePaymentsModeEnumstandardexpressprovider_specific_idstring | nullprovider_configProvider Configidinteger | nullorg_idintegerrequiredcreation_datestringupdate_datestring401 Authentication required403 Caller lacks permission to manage payments for this org404 Organization not found422 Validation Error — HTTPValidationError{
"enabled": true,
"active": false,
"provider": "stripe",
"mode": "standard",
"provider_specific_id": "string",
"provider_config": {},
"id": 1,
"org_id": 1,
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}/api/v1/payments/{org_id}/configpayments:deleteor user sessionDelete the payments configuration for an organization.
org_idintegerrequired401 Authentication required403 Caller lacks permission to manage payments for this org404 Payments config not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/groupspayments:reador user sessionReturn all payment groups configured for an organization.
org_idintegerrequiredPaymentsGroupRead[] — List of payment groups for the org.
idintegerrequiredorg_idintegerrequirednamestringrequireddescriptionstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to view payment groups422 Validation Error — HTTPValidationError[
{
"id": 1,
"org_id": 1,
"name": "Example name",
"description": "An example description",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}
]/api/v1/payments/{org_id}/groupspayments:createor user sessionCreate a new payment group that can bundle resources for offers.
org_idintegerrequirednamestringrequireddescriptionstringPaymentsGroupRead — Newly created payment group.
idintegerrequiredorg_idintegerrequirednamestringrequireddescriptionstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to manage payments for this org422 Validation Error — HTTPValidationError{
"id": 1,
"org_id": 1,
"name": "Example name",
"description": "An example description",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}/api/v1/payments/{org_id}/groups/{group_id}payments:reador user sessionReturn a single payment group by id.
org_idintegerrequiredgroup_idintegerrequiredPaymentsGroupRead — The requested payment group.
idintegerrequiredorg_idintegerrequirednamestringrequireddescriptionstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to view this payment group404 Payment group not found422 Validation Error — HTTPValidationError{
"id": 1,
"org_id": 1,
"name": "Example name",
"description": "An example description",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}/api/v1/payments/{org_id}/groups/{group_id}payments:updateor user sessionUpdate metadata on an existing payment group.
org_idintegerrequiredgroup_idintegerrequirednamestringrequireddescriptionstringPaymentsGroupRead — Updated payment group.
idintegerrequiredorg_idintegerrequirednamestringrequireddescriptionstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to manage this payment group404 Payment group not found422 Validation Error — HTTPValidationError{
"id": 1,
"org_id": 1,
"name": "Example name",
"description": "An example description",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}/api/v1/payments/{org_id}/groups/{group_id}payments:deleteor user sessionDelete an existing payment group. Associated resources are detached.
org_idintegerrequiredgroup_idintegerrequired401 Authentication required403 Caller lacks permission to manage this payment group404 Payment group not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/groups/{group_id}/resourcespayments:reador user sessionReturn the list of resource UUIDs attached to a payment group.
org_idintegerrequiredgroup_idintegerrequired404 Payment group not found422 Validation Error — HTTPValidationError[
"string"
]/api/v1/payments/{org_id}/groups/{group_id}/resourcespayments:createor user sessionAttach a resource (by UUID) to an existing payment group.
org_idintegerrequiredgroup_idintegerrequiredresource_uuidstringrequired401 Authentication required403 Caller lacks permission to manage this payment group404 Payment group or resource not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/groups/{group_id}/resourcespayments:deleteor user sessionDetach a resource from an existing payment group.
org_idintegerrequiredgroup_idintegerrequiredresource_uuidstringrequired401 Authentication required403 Caller lacks permission to manage this payment group404 Payment group or resource not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/groups/{group_id}/syncpayments:reador user sessionReturn all usergroup syncs configured for a payment group.
org_idintegerrequiredgroup_idintegerrequired404 Payment group not found422 Validation Error — HTTPValidationError[
{}
]/api/v1/payments/{org_id}/groups/{group_id}/syncpayments:createor user sessionLink a usergroup to a payment group so purchasers are automatically added to that cohort after a successful payment.
org_idintegerrequiredgroup_idintegerrequiredusergroup_idintegerrequired401 Authentication required403 Caller lacks permission to manage this payment group404 Payment group or usergroup not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/groups/{group_id}/syncpayments:deleteor user sessionRemove a usergroup sync from a payment group.
org_idintegerrequiredgroup_idintegerrequiredusergroup_idintegerrequired401 Authentication required403 Caller lacks permission to manage this payment group404 Payment group or sync not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/offers/{offer_id}/resourcespayments:reador user sessionPublic endpoint returning the resource UUIDs directly linked to an offer (excluding group-granted resources).
org_idintegerrequiredoffer_idintegerrequired422 Validation Error — HTTPValidationError[
"string"
]/api/v1/payments/{org_id}/offers/{offer_id}/resourcespayments:createor user sessionAttach a direct resource (e.g. a course) to an offer. Grants buyers of this offer access to the linked resource.
org_idintegerrequiredoffer_idintegerrequiredresource_uuidstringrequired401 Authentication required403 Caller lacks permission to manage this offer404 Offer, org, or resource not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/offers/{offer_id}/resourcespayments:deleteor user sessionDetach a directly-linked resource from an offer. Does not affect resources granted through a payments group.
org_idintegerrequiredoffer_idintegerrequiredresource_uuidstringrequired401 Authentication required403 Caller lacks permission to manage this offer404 Offer or link not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/offerspayments:reador user sessionList all payments offers owned by an organization, including unlisted ones. Requires authorization.
org_idintegerrequiredPaymentsOfferRead[] — List of payments offers for the organization.
namestringdescriptionstring | nulloffer_typeOfferTypeEnumsubscriptionone_timeprice_typeOfferPriceTypeEnumcustomer_choicefixed_pricebenefitsstringamountnumbercurrencystringis_publicly_listedbooleanidintegerrequiredoffer_uuidstringrequiredorg_idintegerrequiredpayments_config_idintegerrequiredpayments_group_idinteger | nullrequiredprovider_product_idstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to view offers for this org422 Validation Error — HTTPValidationError[
{
"name": "",
"description": "An example description",
"offer_type": "subscription",
"price_type": "customer_choice",
"benefits": "",
"amount": 0,
"currency": "USD",
"is_publicly_listed": true,
"id": 1,
"offer_uuid": "string",
"org_id": 1,
"payments_config_id": 1,
"payments_group_id": 1,
"provider_product_id": "string",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}
]/api/v1/payments/{org_id}/offerspayments:createor user sessionCreate a new payments offer (one-time purchase or subscription) for an organization.
org_idintegerrequirednamestringdescriptionstring | nulloffer_typeOfferTypeEnumsubscriptionone_timeprice_typeOfferPriceTypeEnumcustomer_choicefixed_pricebenefitsstringamountnumbercurrencystringis_publicly_listedbooleanpayments_group_idinteger | nullresource_uuidsstring[]PaymentsOfferRead — Offer created.
namestringdescriptionstring | nulloffer_typeOfferTypeEnumsubscriptionone_timeprice_typeOfferPriceTypeEnumcustomer_choicefixed_pricebenefitsstringamountnumbercurrencystringis_publicly_listedbooleanidintegerrequiredoffer_uuidstringrequiredorg_idintegerrequiredpayments_config_idintegerrequiredpayments_group_idinteger | nullrequiredprovider_product_idstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to create offers in this org404 Organization not found422 Validation Error — HTTPValidationError{
"name": "",
"description": "An example description",
"offer_type": "subscription",
"price_type": "customer_choice",
"benefits": "",
"amount": 0,
"currency": "USD",
"is_publicly_listed": true,
"id": 1,
"offer_uuid": "string",
"org_id": 1,
"payments_config_id": 1,
"payments_group_id": 1,
"provider_product_id": "string",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}/api/v1/payments/{org_id}/offers/public-listingpayments:reador user sessionPublic endpoint listing all publicly-listed offers for an organization, enriched with included-resource metadata (course name, description, thumbnail).
org_idintegerrequired422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/offers/by-resourcepayments:reador user sessionPublic endpoint returning offers that grant access to a given resource UUID, checking both direct offer resources and payments-group resources.
org_idintegerrequiredresource_uuidstringrequired422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/offers/{offer_uuid}/publicpayments:reador user sessionPublic endpoint returning offer metadata and its included resources enriched with course details.
org_idintegerrequiredoffer_uuidstringrequired404 Offer not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/offers/{offer_id}payments:reador user sessionGet a single payments offer by its numeric id.
org_idintegerrequiredoffer_idintegerrequiredPaymentsOfferRead — Offer details.
namestringdescriptionstring | nulloffer_typeOfferTypeEnumsubscriptionone_timeprice_typeOfferPriceTypeEnumcustomer_choicefixed_pricebenefitsstringamountnumbercurrencystringis_publicly_listedbooleanidintegerrequiredoffer_uuidstringrequiredorg_idintegerrequiredpayments_config_idintegerrequiredpayments_group_idinteger | nullrequiredprovider_product_idstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to view this offer404 Offer not found422 Validation Error — HTTPValidationError{
"name": "",
"description": "An example description",
"offer_type": "subscription",
"price_type": "customer_choice",
"benefits": "",
"amount": 0,
"currency": "USD",
"is_publicly_listed": true,
"id": 1,
"offer_uuid": "string",
"org_id": 1,
"payments_config_id": 1,
"payments_group_id": 1,
"provider_product_id": "string",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}/api/v1/payments/{org_id}/offers/{offer_id}payments:updateor user sessionUpdate an existing payments offer.
org_idintegerrequiredoffer_idintegerrequirednamestringdescriptionstring | nulloffer_typeOfferTypeEnumsubscriptionone_timeprice_typeOfferPriceTypeEnumcustomer_choicefixed_pricebenefitsstringamountnumbercurrencystringis_publicly_listedbooleanPaymentsOfferRead — Offer updated.
namestringdescriptionstring | nulloffer_typeOfferTypeEnumsubscriptionone_timeprice_typeOfferPriceTypeEnumcustomer_choicefixed_pricebenefitsstringamountnumbercurrencystringis_publicly_listedbooleanidintegerrequiredoffer_uuidstringrequiredorg_idintegerrequiredpayments_config_idintegerrequiredpayments_group_idinteger | nullrequiredprovider_product_idstringrequiredcreation_datestringrequiredupdate_datestringrequired401 Authentication required403 Caller lacks permission to update this offer404 Offer not found422 Validation Error — HTTPValidationError{
"name": "",
"description": "An example description",
"offer_type": "subscription",
"price_type": "customer_choice",
"benefits": "",
"amount": 0,
"currency": "USD",
"is_publicly_listed": true,
"id": 1,
"offer_uuid": "string",
"org_id": 1,
"payments_config_id": 1,
"payments_group_id": 1,
"provider_product_id": "string",
"creation_date": "2026-01-15T09:30:00Z",
"update_date": "2026-01-15T09:30:00Z"
}/api/v1/payments/{org_id}/offers/{offer_id}payments:deleteor user sessionDelete a payments offer. The offer becomes unavailable for checkout immediately.
org_idintegerrequiredoffer_idintegerrequired401 Authentication required403 Caller lacks permission to delete this offer404 Offer not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/offers/{offer_uuid}/checkoutpayments:createor user sessionCreate a provider checkout session for an offer. Returns a URL the user should be redirected to in order to complete purchase.
org_idintegerrequiredoffer_uuidstringrequiredredirect_uristringrequired401 Authentication required404 Offer not found422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/enrollments/minepayments:reador user sessionReturn the current user's paid enrollments (offers purchased) within an organization.
org_idintegerrequired401 Authentication required422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/billing/portalpayments:createor user sessionCreate a provider billing-portal session so the user can manage subscriptions, cancel, and view invoices/receipts.
org_idintegerrequiredreturn_urlstringrequired401 Authentication required404 No payments config found for this org422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/customerspayments:reador user sessionList every known payment customer (buyer) for the organization.
org_idintegerrequired401 Authentication required403 Caller lacks permission to view customers for this org422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/stripe/overviewpayments:reador user sessionLive dashboard overview fetched directly from the Stripe API (balance, recent activity summary).
org_idintegerrequired401 Authentication required422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/stripe/chargespayments:reador user sessionList Stripe charges for the org's connected account, paginated via `starting_after`. Data is fetched directly from Stripe.
org_idintegerrequiredlimitintegerstarting_afterstring | null401 Authentication required422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/stripe/subscriptionspayments:reador user sessionList Stripe subscriptions for the org's connected account (defaults to active). Data is fetched directly from Stripe.
org_idintegerrequiredstatusstring401 Authentication required422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/stripe/connect/linkpayments:createor user sessionGenerate a Stripe Connect OAuth URL so an admin can connect their own Stripe account to the organization.
org_idintegerrequiredredirect_uristringrequired401 Authentication required403 Caller lacks permission to configure payments for this org422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/stripe/oauth/callbackpayments:reador user sessionCallback endpoint Stripe redirects to after the admin completes the Connect OAuth flow. Persists the resulting account id to the org's payments config.
codestringrequiredorg_idintegerrequired400 Invalid or expired authorization code401 Authentication required422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/stripe/express/connect/linkpayments:createor user sessionCreate a Stripe Express account (if not already created) and return an onboarding link for the admin to complete account setup.
org_idintegerrequiredredirect_uristringrequired401 Authentication required403 Caller lacks permission to configure payments for this org422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/stripe/express/connect/refreshpayments:createor user sessionGenerate a fresh Stripe Express onboarding link when the previous one has expired. This endpoint is unauthenticated because Stripe redirects unauthenticated sessions here.
org_idintegerrequiredredirect_uristringrequired404 No payments config or Express account for this org422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}/api/v1/payments/{org_id}/stripe/express/dashboardpayments:reador user sessionReturn a Stripe Express hosted dashboard URL for the connected Express account so the admin can manage payouts, balances, etc.
org_idintegerrequired401 Authentication required403 Caller lacks permission to view payments for this org404 No Express account linked to this org422 Validation Error — HTTPValidationError{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}