> For the complete documentation index, see [llms.txt](https://guides.paynow.gg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guides.paynow.gg/integrations-and-commands/delivery-methods.md).

# Delivery Methods

Every product needs a route to the buyer. PayNow has two, and your store uses one of them: a connected **game server**, or a **delivery webhook**.

*Dashboard → Settings. Store owner or `store_update`.*

## Which one your store uses

Your store's **business type** decides it.

| Business type | Delivery                                                                          |
| ------------- | --------------------------------------------------------------------------------- |
| A game server | The PayNow plugin on your server runs the product's commands.                     |
| Anything else | A delivery webhook. PayNow calls your endpoint and your system fulfils the order. |

If you are selling software, downloads, a SaaS product or anything that is not a game server, set the business type to **SaaS** and configure a delivery webhook. A store set to the wrong type has no working route to the buyer, and orders complete without anything being delivered.

You cannot skip this. PayNow has to know what to expect when an order completes, so a store with neither a connected server nor a delivery webhook cannot deliver.

## A delivery webhook is not a Discord webhook

These are two different things with the same word, and mixing them up is the most common setup mistake here.

* The webhooks on [Webhooks](/integrations-and-commands/webhooks.md) post **notifications** into a Discord channel so you can watch sales come in. They deliver nothing to the customer.
* A **delivery webhook** is an endpoint on your own system. PayNow calls it when an order completes and your code grants the thing that was bought.

A Discord webhook URL will not work as a delivery endpoint.

## Validate it before going live

A delivery webhook has to be proven to work, and PayNow checks by requiring a real order through it rather than trusting the configuration.

Make a genuine purchase that costs nothing:

1. Create a **coupon** or **gift card** that brings the total to zero, or price a test product at **0**.
2. Buy the product through your own storefront.
3. Confirm your endpoint received the call and delivered.

That is also the fastest way to test a game-server store. See [Game Servers](/integrations-and-commands/game-servers.md#testing-the-connection).

## Minecraft: which integration to pick

Three options, and the difference is how a player is identified.

| Option                | Identifies players by           | Use when                                |
| --------------------- | ------------------------------- | --------------------------------------- |
| **Minecraft**         | UUID                            | Your server is Java and online-mode.    |
| **Minecraft Geyser**  | UUID, for both Java and Bedrock | Bedrock players connect through Geyser. |
| **Minecraft offline** | Name only, no UUID validation   | Your server runs offline-mode.          |

{% hint style="warning" %}
**Offline mode identifies buyers by name alone.** Names can be taken by someone else, so a purchase can be delivered to the wrong person. Use UUID-based identification wherever your server allows it.
{% endhint %}
