Independent product studio · Swedenhello@karelialabs.com

Guide

Paymenter with Pterodactyl 2.0: setup guide (nests error, SSO, stock, invoices)

Short answerThe Pterodactyl 2.0 upgrade breaks server creation in Paymenter and leaves three things to set up on purpose: customer sign-in, stock that follows your real capacity and invoices in the panel. Tested on Paymenter 1.5.9.

Updated

If you sell game servers with Paymenter and run Pterodactyl, the 2.0 upgrade breaks one thing at once (server creation) and leaves four things to set up on purpose: the nests error fix, customer sign-in, stock that follows your real capacity, and invoices where customers can see them. This guide takes them in the order you will meet them.

Everything here was tested on Paymenter 1.5.9 with Pterodactyl 2.0.0-beta.2 and Pterodactyl 1.15.1. Pterodactyl 2.0 was still in beta at the time of writing, so check the version notes on each product page before you change a live store.

The error: "The route api/application/nests could not be found"

After the panel is upgraded to Pterodactyl 2.0, a Paymenter store that uses Paymenter's built-in Pterodactyl extension shows this when it tries to create a server, upgrade one, or open a product's Server tab:

The route api/application/nests/1/eggs/1 could not be found.

On the product page the same message appears as The route api/application/nests could not be found. New orders are paid but no server is created, and the egg list is empty.

The cause: Pterodactyl 2.0 removed the nest endpoints from the Application API, and the built-in extension still calls them. Pterodactyl's own upgrade guide has a step called "Update Your Billing Module" for exactly this reason.

Paymenter added basic Pterodactyl 2.0 support to its master branch on 2026-10-23. It was not in a release when this guide was written, so Paymenter 1.5.9 still needs a 2.0-aware extension.

The fix: a server extension that speaks both APIs

Pterodactyl 2.0 for Paymenter is a free, MIT-licensed Paymenter server extension. It detects the panel version and uses nests on 1.x and eggs and tags on 2.0. It keeps the built-in extension's server settings and product options, and egg IDs do not change in the 2.0 upgrade, so products keep their egg.

  1. Download the latest release from GitHub or SourceXchange.
  2. Copy the Pterodactyl2 folder to extensions/Servers/ in Paymenter, so that you have extensions/Servers/Pterodactyl2/Pterodactyl2.php.
  3. Switch your existing servers with one command. Products, services and settings stay as they are:
php artisan tinker --execute="App\Models\Server::where('extension','Pterodactyl')->update(['extension'=>'Pterodactyl2']);"

On Docker, put docker compose exec paymenter in front of the command. To switch back, swap the two names.

  1. In Paymenter open Admin → Servers → your server → Test Connection, then open one product and check that its egg is still selected.

To add a new server instead, use Admin → Servers → New, choose Pterodactyl 2.0, enter the panel URL and an Application API key, and click Test Connection.

API key permissions. Create the key in Pterodactyl under Admin → API (Application API) with read and write on servers, users, nodes, locations, allocations and eggs. On 2.0, read access to tags adds the egg tag filter on the product page.

Encryption note for Paymenter 1.5.9. The first save of a new server under Admin → Servers → New stores its settings without the encrypted flag. Since version 1.0.2 the extension encrypts the key right after the server is created. For a server created earlier, open it and click Save changes once.

Upgrade the panel in this order

  1. Install the extension and switch your servers while the panel is still on 1.x. It works on both versions, so customers notice nothing.
  2. Upgrade Pterodactyl with the official guide.
  3. Run Test Connection and check one product's egg.

Single sign-on: two different tools

"SSO" means two things in this setup, and they work side by side.

Customer clicks in Paymenter and lands in the panel, already signed in: Karelia Bridge.

Karelia Bridge turns *Go to server* on the service page into *Open control panel*. Paymenter checks that the service belongs to the customer and asks the panel for a sign-in link. The panel returns a random 64-character link that works once, for 60 seconds, and writes the sign-in to its activity log. Administrators and users with two-factor authentication are sent to the normal login unless you allow them in the panel settings.

Install it in two parts. In Pterodactyl 2.0 use Admin → Extensions → Install with paymenter-bridge.pteroext and tick *Enable after install*. In Paymenter copy KareliaBridge to extensions/Others/, then Admin → Extensions → Available Extensions → Karelia Bridge → Install and enable it. The Gumroad edition asks for the license key from your receipt. Then run:

php artisan karelia-bridge:check
php artisan karelia-bridge:sync

The button is added through the Pterodactyl 2.0 server extension from section 2. Servers that still use the built-in extension keep *Go to server*. The Application API key needs read and write on all resources, which Pterodactyl 2.0 requires for any extension endpoint.

Customer starts at the panel's login page: Sign in with Paymenter.

Sign in with Paymenter is a free extension that adds a *Sign in with Paymenter* button to the Pterodactyl 2.0 login page. It uses the OAuth server built into Paymenter.

  1. In Paymenter open OAuth Clients → New OAuth Client. Set the redirect to https://panel.example.com/extensions/paymenter-sso/callback (your panel's APP_URL plus that path) and copy the client ID and the secret, which is shown once.
  2. Install paymenter-sso.pteroext with php artisan p:extension:install /path/to/paymenter-sso.pteroext --enable.
  3. In Admin → Extensions → Sign in with Paymenter → Settings save the Paymenter URL, client ID and client secret. The button appears once all three are saved.

Customers are matched by their Paymenter account, or the first time by a verified email address. Root administrators are refused unless you allow them, and two-factor authentication still applies.

Stock that follows your real capacity

Paymenter sells a product until its stock reaches zero, and the stock only changes when you change it. Pterodactyl refuses to create a server when no node has room, so you end up with paid orders that cannot be deployed.

Auto Stock for Paymenter sets each product's stock to servers that still fit on your nodes, minus orders not yet provisioned, minus a buffer you choose. It uses the panel's own rule for fit (used plus size at most total times one plus overallocation divided by 100, for memory and disk) and counts free ports. It works with the built-in Pterodactyl extension on 1.x and with the 2.0 extension from section 2.

  1. Admin → Extensions → Available Extensions → Upload Extension, upload the zip, then click Install next to Auto Stock (Karelia Labs).
  2. Turn on Enabled, pick an interval and save. Paymenter's scheduler must run: * * * * * php /var/www/paymenter/artisan schedule:run.
  3. Open Admin → Administration → Auto Stock, click Settings on a product, turn it on, and set a buffer and an optional cap. Saving syncs the product at once.

If the panel is unreachable or the key is revoked, the product keeps its last good stock and the page shows the error. A failure never sets the stock to 0. On a product that still uses the built-in extension against a 2.0 panel, Auto Stock reports the nests problem as an error instead of counting it.

Invoices inside the panel

Karelia Bridge adds a Billing page to every server in the panel with the plan, price, next due date, suspension date and up to three unpaid invoices with a Pay now button. A banner above the console appears a set number of days before the due date (3 by default, 0 for overdue only) and turns red once the invoice is overdue. The server list shows a *Due in 2 d* or *Overdue* badge.

Billing updates when an invoice is created or paid and when a service changes, plus a full sync every hour. After installing, run php artisan karelia-bridge:sync once to send billing for existing services. Owners and administrators always see the Billing page, and a subuser sees it with the *Billing from Paymenter → billing* permission.

Troubleshooting

What you seeWhat to do
The route api/application/nests/... could not be foundThe server still uses the built-in extension. Run the switch command in section 2.
Pterodactyl answered HTTP 403The API key lacks a permission. Give it read and write on the resources listed above (all resources for Karelia Bridge).
Node is not suitable for deploymentThe node in the product has too little free memory or disk, or no free allocations.
The port array needs a SERVER_PORT entryThe product's port array must name SERVER_PORT.
Product page shows no eggsClick Test Connection once. The panel version is cached for 10 minutes.
The button still says *Go to server*Karelia Bridge is not enabled or its license is not active, *One-click sign-in* is off, or the product's server uses the built-in extension.
The customer lands on the normal sign-in pageThe user is an administrator or has two-factor authentication (see the panel settings), or the link was older than 60 seconds.
*The email address of your Paymenter account is not verified yet*The customer opens the link in Paymenter's verification email, or an admin switches on *Email Verified* for the user.
The Billing page says *No billing information yet*Run php artisan karelia-bridge:sync. A service syncs only once its server exists in the panel.
Auto Stock shows "The API key may not read nodes, allocations and eggs (HTTP 403)"Give the key read access to nodes, allocations and eggs.

Get the tools

Questions: use the support link on the page where you got the product, or write to support@karelialabs.com. Give your Paymenter and Pterodactyl versions and the exact message you see.

FAQ

Do my products keep working after the Pterodactyl 2.0 upgrade?

Yes, once their server uses a 2.0-aware extension. Egg IDs do not change in the upgrade and the extension uses the same product options.

Can I install the fix before upgrading the panel?

Yes. On 1.x it uses nests, on 2.0 eggs and tags, so you can switch first.

Will Paymenter fix this itself?

Basic 2.0 support is on Paymenter's master branch but was not released when this was written. The free extension still adds reading every page of eggs, nodes and locations, the egg tag filter, node reservation tags and readable errors.

Which tool do I need for SSO?

Karelia Bridge for one click from Paymenter into the right server plus billing in the panel. Sign in with Paymenter for a button on the panel's login page. They can be installed together.

Does Karelia Bridge work on Pterodactyl 1.x?

No. The panel half uses Pterodactyl 2.0's extension system (beta 1 or newer).

Which of these are free?

Pterodactyl 2.0 for Paymenter and Sign in with Paymenter are free (MIT). Auto Stock and Karelia Bridge are paid.

Is any of this affiliated with Paymenter or Pterodactyl?

No. These are independent extensions by Karelia Labs; the names describe compatibility.

More guides

More from Karelia Labs