[Shopify Functions](/docs/apps/build/functions) allow developers to customize the backend logic that powers parts of Shopify. This guide introduces the available APIs for Shopify Functions.
## Availability of Shopify Functions
- **All plans**: Except as noted below, stores on any plan can use public apps that are distributed through the Shopify App Store and contain functions.
- **Shopify Plus**: Only stores on a [Shopify Plus plan](https://help.shopify.com/manual/intro-to-shopify/pricing-plans/plans-features/shopify-plus-plan) can use [custom apps](https://help.shopify.com/manual/apps/app-types/custom-apps) that contain Shopify Function APIs.
| Function API or feature | Availability |
| ----------------------- | ------------ |
| Cart Transform API [update operation](/docs/api/functions/reference/cart-transform#example-update-operation) | Only Shopify Plus stores |
| [Order Routing Location Rule API](/docs/api/functions/reference/order-routing-location-rule/) | Only custom apps on Shopify Plus stores, by request |
| [Local Pickup Delivery Option Generator API](docs/api/functions/reference/local-pickup-delivery-option-generator/) | Only custom apps on Shopify Plus stores, by request |
| [Pickup Point Delivery Option Generator API](/docs/api/functions/reference/pickup-point-delivery-option-generator) | Only custom apps on Shopify Plus stores, by request |
| [Discounts Allocator API](/docs/api/functions/reference/discounts-allocator/) | Only custom apps on Shopify Plus stores, with the [Discounts Allocator developer preview](docs/api/release-notes/developer-previews#discounts-allocator-developer-preview) |
| [Payment Customizations API](/docs/api/functions/reference/payment-customization) | Limited. [Learn more](https://help.shopify.com/en/manual/checkout-settings/checkout-customization#understanding-payment-method-customizations) |
| Network access for Shopify Functions | Limited. [Learn more](/docs/apps/build/functions/input-output/network-access#availability-of-network-access-for-functions). |
## Available APIs
The following Function APIs are available:
| Function API | Description | Extension target | Merchant interface |
| ------------ | ----------- | --- | --- |
| [Delivery Customization API](/docs/api/functions/reference/delivery-customization/) | Rename, reorder, and sort the delivery options available to buyers during checkout. | [purchase.delivery-customization.run](/docs/api/functions/reference/delivery-customization/graphql#extension-targets) | Embedded app pages |
| [Order Discount API](/docs/api/functions/reference/order-discounts/) | Create a new type of discount that's applied to all merchandise in the cart. | [purchase.order-discount.run](/docs/api/functions/reference/order-discounts/graphql#extension-targets) | Admin UI extensions, Embedded app pages |
| [Product Discount API](/docs/api/functions/reference/product-discounts/) | Create a new type of discount that's applied to a particular product or product variant in the cart. | [purchase.product-discount.run](/docs/api/functions/reference/product-discounts/graphql#extension-targets) | Admin UI extensions, Embedded app pages |
| [Shipping Discount API](/docs/api/functions/reference/shipping-discounts/) | Create a new type of discount that's applied to one or more shipping rates at checkout. | [purchase.shipping-discount.run](/docs/api/functions/reference/shipping-discounts/graphql#extension-targets) | Admin UI extensions, Embedded app pages |
| [Payment Customization API](/docs/api/functions/reference/payment-customization/) | Rename, reorder, and sort the payment methods available to buyers during checkout. | [purchase.payment-customization.run](/docs/api/functions/reference/payment-customization/graphql#extension-targets) | Embedded app pages |
| [Cart Transform API](/docs/api/functions/reference/cart-transform/) | Expand cart line items and update the presentation of cart line items. | [purchase.cart-transform.run](/docs/api/functions/reference/cart-transform/graphql#extension-targets) | None |
| [Cart and Checkout Validation API](/docs/api/functions/reference/cart-checkout-validation/) | Provide your own validation of a cart and checkout. | [purchase.validation.run](/docs/api/functions/reference/cart-checkout-validation/graphql#extension-targets) | Admin UI extensions |
| [Fulfillment Constraints API](/docs/api/functions/reference/fulfillment-constraints) | Provide your own logic for how Shopify should fulfill and allocate an order. | [purchase.fulfillment-constraint-rule.run](https://shopify.dev/docs/api/functions/reference/fulfillment-constraints/graphql#extension-targets) | None |
| [Local Pickup Delivery Option Generator API](/docs/api/functions/reference/local-pickup-delivery-option-generator/) | Generate custom local pickup options available to buyers during checkout. | [purchase.local-pickup-delivery-option-generator.run](/docs/api/functions/reference/local-pickup-delivery-option-generator/graphql#extension-targets) | None |
| [Pickup Point Delivery Option Generator API](/docs/api/functions/reference/pickup-point-delivery-option-generator/) | Generate custom pickup point options available to buyers during checkout. | [purchase.pickup-point-delivery-option-generator.run](/docs/api/functions/reference/pickup-point-delivery-option-generator/graphql#extension-targets) | None |
## APIs in developer preview
| Function API | Description | Extension target | Merchant Interface |
| ------------ | ----------- | --- | --- |
| [Order Routing Location Rule API](/docs/api/functions/reference/order-routing-location-rule/) | Provide your own ranking of location, for each item, during order routing. | [purchase.order-routing-location-rule.run](/docs/api/functions/reference/order-routing-location-rule/graphql#extension-targets) | Admin UI extensions |
| [Discounts Allocator API](/docs/api/functions/reference/discounts-allocator/) | Provide your own logic for how discounts should be calculated and allocated to a given cart. | [purchase.discounts-allocator.run](/docs/api/functions/reference/discounts-allocator/graphql#extension-targets) | None |
## Getting started
Learn how to use Shopify Functions by following one of our use case tutorials:
## Developer tools and resources
Explore the developer tools and resources available for Shopify Functions.
## API versions
Function APIs are [versioned](/docs/api/usage/versioning). Updates are released quarterly and supported API versions are listed in the [release notes](/docs/api/release-notes).
[Learn how to update to a new version of a Function API](/docs/apps/build/functions/input-output#api-versions).
## Limitations and considerations
The following limitations and considerations apply to all functions:
- Apps can reference only their own functions in GraphQL Admin API mutations, such as [`discountAutomaticAppCreate`](/docs/api/admin-graphql/latest/mutations/discountAutomaticAppCreate) and [`cartTransformCreate`](/docs/api/admin-graphql/latest/mutations/cartTransformCreate). Referencing a function from another app results in a `Function not found` error.
- Shopify doesn't allow nondeterminism in functions, which means that you can't use any randomizing or clock functionality in your functions.
- You can't debug your function by printing out `STDOUT`, which is reserved for function output. Use `STDERR` instead.
- Apps that provide dynamic editing and execution of function code aren't permitted on the Shopify App Store.
- Network access is supported for some functions, refer to [network access](/docs/apps/build/functions/input-output/network-access) for more information. You can also pre-populate data by using metafields on products and customers, or passing data using cart attributes.
## Resource limits
> Note:
> Function resource limits treat 1 kilobyte (kB) as 1000 bytes.
### Fixed limits
The following resource limits apply to all functions:
| Resource | Limit |
|-|-|
| Compiled binary size | 256 kB |
| Runtime linear memory | 10,000 kB |
| Runtime stack memory | 512 kB |
| Logs written to `STDERR` | 1 kB (truncated) |
### Dynamic limits
Certain limits are dynamic and scale based on the number of line items in a cart. The following resource limits apply to all functions for carts with up to 200 line items:
| Resource | Limit (up to 200 line items) |
|-|-|
| Execution [instruction count](https://webassembly.github.io/spec/core/syntax/instructions.html) | 11 million instructions |
| Function input | 128 kB |
| Function output | 20 kB |
For carts with more than 200 line items, these values will scale proportionally as the number of cart lines increases. Calculated limits for a function execution are available in your Partner Dashboard and can be [tested with Shopify CLI](/docs/apps/build/functions/test-debug-functions#execute-the-function-locally-using-shopify-cli).
## Next steps
- Learn about [how Shopify Functions work](/docs/apps/build/functions) and the benefits of using Shopify Functions.
- Learn about how data is [input to and output from Shopify Functions](/docs/apps/build/functions/input-output).