# 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 | **Description** |
| --- | --- | --- | --- |
| [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. |
