# Extension points Find the extension point that matches your use case. Extension points are designated places in Stripe where you can run custom logic. Each extension point specifies: - **Input**: The data Stripe sends to your extension - **Output**: The data your extension must return to Stripe - **Allowed implementation types**: Whether the extension point supports scripts, remote functions, or both ## Available extension points | Name | ID | Implementation types | | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------- | ----------------------- | | [Customer balance application](https://docs.stripe.com/extensions/customer-balance-application-extension.md) | `billing.customer_balance_application` | Script | Control how much of a customer’s credit balance Stripe applies to an invoice. | | [Prorations](https://docs.stripe.com/extensions/prorations-extension.md) | `billing.prorations` | Script | Customize how Stripe prorates subscription changes when a customer upgrades, downgrades, or cancels mid-period. | | [Recurring billing item handling](https://docs.stripe.com/extensions/recurring-billing-item-handling-extension.md) | `billing.recurring_billing_item_handling` | Script | Decide whether each recurring billing item is invoiced or skipped before Stripe creates it. | | [Custom action](https://docs.stripe.com/extensions/custom-action.md) | `extend.workflows.custom_action` | Remote function, Script | Define actions which can be triggered by Stripe Workflows. |