BTCPay Server
BUSINESS · COMMERCE & FINANCE
Stores, invoices, payment requests, payouts, and apps on their own BTCPay server.
Connect BTCPay Server with Fabriq Developer
Your user pastes their BTCPay Server credential on a page Agentic Fabriq hosts, so it never reaches your backend and never becomes one shared key across all of your users. Same call as OAuth, one more argument.
from af_sdk import AgenticFabriq
af = AgenticFabriq() # reads AF_APP_ID / AF_APP_SECRET
url = await af.initiate_connection(request, provider="btc_pay_server", method="api_key")
return redirect(url) # an AF-hosted page, not yours
async with await af.for_user(request) as session:
tools = await session.get_tools() # only what this user grantedProvider names are surfaces, not vendors, and the authoritative list is the capabilities endpoint rather than any page including this one — an unknown name returns 400 with the valid list. Fabriq Developer is free to start and needs no provider paperwork. Start free or read the quickstart.
Connecting BTCPay Server in practice
BTCPay is self-hosted, so there is no app registry and no central consent screen: an agent sends the user to their own server with a permissions list in the URL and the user mints a key. The trap is the default — BTCPay warns that "Omitting permissions when creating a key can produce unrestricted access", so a blank permission list is the widest key, not the narrowest.
Scopes that draw scrutiny
no permissions specifiedBTCPay’s own warning: "Omitting permissions when creating a key can produce unrestricted access." The empty case is the dangerous one.btcpay.store.cancreateinvoiceCreates invoices on a store — the permission an agent that takes payments actually needs, and the one to ask for instead of a blank list.btcpay.store.canviewinvoicesReads a store’s invoices, which is the customer payment history.btcpay.store.cancreateinvoice:STORE_IDAny permission can be narrowed to one store by appending :STORE_ID, and selectiveStores=true on the authorization URL is what lets the user do it. Without the suffix the permission covers every store the user has.
Rate limits
- Basic authentication "is rate limited and intended mainly to bootstrap an API key"; no figure is published for API-key requests, which is consistent with every instance being self-hosted.
Who has to approve
The server’s own user is the gate. An integration builds a URL to the user’s BTCPay instance carrying applicationName, permissions, optional selectiveStores=true and strict=true, and an HTTPS redirect, and the user approves it in their own UI. strict=true stops the user editing the requested permission list; selectiveStores=true lets them narrow each permission to a single store. applicationIdentifier lets the app recognise a prior authorization instead of asking again.
Worth knowing
- The redirect URL must be HTTPS, which rules out a plain localhost callback during development.
- Basic authentication has to be switched on per user under "Allow Basic authentication for Greenfield API" before it works at all, so a password-based fallback fails on a default install.
- BTCPay states plainly: "Do not ask users to disclose their password to a third-party application and do not retain it as an integration credential" — basic auth is for bootstrapping a key and nothing else.
- Because every deployment is a different server on a different version, permissions and endpoints an agent relies on may simply not exist on the instance it is pointed at.
Checked against Greenfield API authentication (2026-09-29), BTCPay Greenfield API reference (2026-09-29)
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
btc_pay_server_delete_api_v1_api_keys_by_apikeyidWRITERevoke the current API key so that it cannot be used anymore. DELETE /api/v1/api-keys/{apiKeyId}. The API key must carry the BTCPay permission `unrestricted`, which is chosen when the key is minted. Revokes the named key. The id is the `id` field, NOT the secret -- BTCPay's own schema says `id` exists 'to revoke it without sending the secret'. Passing this connection's own key id here has the same effect as 'Revoke the current API Key' and will disconnect this integration.
btc_pay_server_delete_api_v1_api_keys_currentWRITERevoke the current API key so that it cannot be used anymore. DELETE /api/v1/api-keys/current. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it. SELF-DESTRUCT. This revokes the key THIS CONNECTION IS AUTHENTICATING WITH, so every other Agentic Fabriq tool on this connection stops working the moment it succeeds and the connection has to be remade with a freshly minted key. It is not the tool for tidying up someone else's key: 'Revoke an API Key' (DELETE /api/v1/api-keys/{apiKeyId}) takes an id and leaves this connection alive.
btc_pay_server_delete_api_v1_apps_by_appidWRITEDeletes app with specified ID. DELETE /api/v1/apps/{appId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_apps_by_appid_image_by_fileidWRITEDeletes the app item image. DELETE /api/v1/apps/{appId}/image/{fileId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_files_by_fileidWRITEDeletes the file. DELETE /api/v1/files/{fileId}. The API key must carry the BTCPay permission `btcpay.server.canmodifyserversettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_invitations_by_tokenWRITEDecline the current user's invitation identified by its token. DELETE /api/v1/invitations/{token}. The API key must carry the BTCPay permission `btcpay.user.canmodifyprofile`, which is chosen when the key is minted. Declines a store invitation. The token is single-use: declining it cannot be undone and a new invitation has to be sent.
btc_pay_server_delete_api_v1_invoices_by_invoiceidWRITEArchives the specified invoice. The store is resolved automatically from the invoice. DELETE /api/v1/invoices/{invoiceId}. The API key must carry the BTCPay permission `btcpay.store.canmodifyinvoices`, which is chosen when the key is minted. ARCHIVES rather than erases, despite the DELETE verb: the invoice stops appearing in the default listing and can be brought back with 'Unarchive invoice'. Payments already received are not affected. This is the gentlest of this provider's 27 deletes and is safe to use for tidying.
btc_pay_server_delete_api_v1_payment_requests_by_paymentrequestidWRITEArchives the specified payment request. The store is resolved automatically from the payment request. DELETE /api/v1/payment-requests/{paymentRequestId}. The API key must carry the BTCPay permission `btcpay.store.canmodifypaymentrequests`, which is chosen when the key is minted. ARCHIVES the payment request rather than erasing it; invoices already created from it survive.
btc_pay_server_delete_api_v1_payouts_by_payoutidWRITECancel the payout. DELETE /api/v1/payouts/{payoutId}. The API key must carry the BTCPay permission `btcpay.store.canmanagepullpayments`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_pull_payments_by_pullpaymentidWRITEArchive this pull payment (Will cancel all payouts awaiting for payment). The store is resolved automatically from the pull payment. DELETE /api/v1/pull-payments/{pullPaymentId}. The API key must carry the BTCPay permission `btcpay.store.canarchivepullpayments`, which is chosen when the key is minted. ARCHIVES the pull payment, which stops anyone claiming against it. Payouts already approved are not withdrawn by this -- cancel those individually with 'Cancel a payout'.
btc_pay_server_delete_api_v1_stores_by_storeidWRITERemoves the specified store. If there is another user with access, only your access will be removed. DELETE /api/v1/stores/{storeId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted. BLAST RADIUS DEPENDS ON WHO ELSE HAS ACCESS, and BTCPay says so: 'If there is another user with access, only your access will be removed.' So the same call is a soft leave on a shared store and a permanent deletion on a store only this account can reach -- invoices, payment requests, apps and webhooks included. Check 'List a store's users' first if which one it will be matters.
btc_pay_server_delete_api_v1_stores_by_storeid_lightning_addresses_by_usernameWRITERemove store configured lightning address. DELETE /api/v1/stores/{storeId}/lightning-addresses/{username}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_logoWRITEDelete the store's logo. DELETE /api/v1/stores/{storeId}/logo. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_offerings_by_offeringid_subscribers_by_customerselectorWRITEDeletes a subscriber for a specific offering by customer selector. DELETE /api/v1/stores/{storeId}/offerings/{offeringId}/subscribers/{customerSelector}. The API key must carry the BTCPay permission `btcpay.store.canmanagesubscribers`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_payment_methods_by_paymentmethodidWRITEDelete information about the stores' configured payment method. DELETE /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_addressWRITEUnReserve address. DELETE /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/address. The API key must carry the BTCPay permission `btcpay.store.canmanagewallettransactions`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_objects_by_objecttype_by_objectidWRITERemove wallet object. DELETE /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/objects/{objectType}/{objectId}. The API key must carry the BTCPay permission `btcpay.store.canmanagewallettransactions`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_objects_by_objecttype_by_objectid_links_by_linktype_by_linkidWRITERemove wallet object link. DELETE /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/objects/{objectType}/{objectId}/links/{linkType}/{linkId}. The API key must carry the BTCPay permission `btcpay.store.canmanagewallettransactions`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_payout_processors_by_processor_by_paymentmethodidWRITERemove store configured payout processor. DELETE /api/v1/stores/{storeId}/payout-processors/{processor}/{paymentMethodId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_users_by_idoremailWRITERemoves the specified store user. If there is no other owner, this endpoint will fail. DELETE /api/v1/stores/{storeId}/users/{idOrEmail}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_stores_by_storeid_users_by_idoremail_invitationWRITECancel the specified user's pending store invitation. DELETE /api/v1/stores/{storeId}/users/{idOrEmail}/invitation. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_users_by_idoremailWRITEDelete a user. Must be an admin to perform this operation. Attempting to delete the only admin user will not succeed. All data associated with the user will be deleted as well if the operation succeeds. DELETE /api/v1/users/{idOrEmail}. The API key must carry the BTCPay permission `btcpay.user.candeleteuser`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_users_by_idoremail_api_keys_by_apikeyidWRITERevoke the API key of a target user so that it cannot be used anymore. DELETE /api/v1/users/{idOrEmail}/api-keys/{apiKeyId}. The API key must carry the BTCPay permission `unrestricted`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_users_meWRITEDeletes user profile and associated user data for user making the request. DELETE /api/v1/users/me. The API key must carry the BTCPay permission `btcpay.user.candeleteuser`, which is chosen when the key is minted. DELETES THE ACCOUNT THIS CONNECTION ACTS AS, and its data with it. There is no undo and the connection dies with the account. It is almost never the tool anyone wanted: removing a user from a STORE is 'Remove a store user', and disconnecting Agentic Fabriq is done here in the console.
btc_pay_server_delete_api_v1_users_me_notifications_by_idWRITERemoves the specified notification. DELETE /api/v1/users/me/notifications/{id}. The API key must carry the BTCPay permission `btcpay.user.canmanagenotificationsforuser`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_users_me_pictureWRITEDeletes the user profile picture. DELETE /api/v1/users/me/picture. The API key must carry the BTCPay permission `btcpay.user.canmodifyprofile`, which is chosen when the key is minted.
btc_pay_server_delete_api_v1_webhooks_by_webhookidWRITEDelete a webhook. DELETE /api/v1/webhooks/{webhookId}. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_api_keys_currentREADView information about the current API key. GET /api/v1/api-keys/current. The API key must carry the BTCPay permission `btcpay.server.canmanageusers`, which is chosen when the key is minted. THE `apiKey` FIELD IS REMOVED BEFORE YOU SEE IT, and that is this integration's doing rather than BTCPay's: the reply schema documents `apiKey` as 'The API Key to use for API Key Authentication' -- this connection's own credential, verbatim, from a read BTCPay requires no permission for. A tool result is not redacted anywhere downstream, so the connector replaces that one value with a marker. Everything else survives: `id` (which is what revokes a key without sending the secret), `label`, `created` and `permissions`, which is the useful part -- it tells you exactly what this connection's key is allowed to do, including any `:<storeId>` narrowing. Nothing here can hand back the credential.
btc_pay_server_get_api_v1_appsREADReturns basic app data for all apps for all stores. GET /api/v1/apps. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_apps_by_appidREADReturns basic app data shared between all types of apps. GET /api/v1/apps/{appId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_apps_by_appid_salesREADReturns sales statistics for the app. GET /api/v1/apps/{appId}/sales. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_apps_by_appid_top_itemsREADReturns top items statistics for the app. GET /api/v1/apps/{appId}/top-items. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_apps_crowdfund_by_appidREADReturns crowdfund app data. GET /api/v1/apps/crowdfund/{appId}. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_apps_pos_by_appidREADReturns POS app data. GET /api/v1/apps/pos/{appId}. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_filesREADLoad all files that exist. GET /api/v1/files. The API key must carry the BTCPay permission `btcpay.server.canmodifyserversettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_files_by_fileidREADView information about the specified file. GET /api/v1/files/{fileId}. The API key must carry the BTCPay permission `btcpay.server.canmodifyserversettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_healthREADCheck the instance health status. GET /api/v1/health. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it. The only endpoint on this surface that needs no credential at all (`security: []` in the specification, measured 200 against the public demo instance with no Authorization header). Useful as a control: if this answers and 'Get server info' 401s, the instance is up and the key is the problem.
btc_pay_server_get_api_v1_invitations_by_tokenREADGet invitation details from its token before accepting or declining it. GET /api/v1/invitations/{token}. The API key must carry the BTCPay permission `btcpay.user.canmodifyprofile`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_invoices_by_invoiceidREADView information about the specified invoice. The store is resolved automatically from the invoice. GET /api/v1/invoices/{invoiceId}. The API key must carry the BTCPay permission `btcpay.store.canviewinvoices`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_invoices_by_invoiceid_payment_methodsREADView information about the specified invoice's payment methods. The store is resolved automatically from the invoice. GET /api/v1/invoices/{invoiceId}/payment-methods. The API key must carry the BTCPay permission `btcpay.store.canviewinvoices`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_invoices_by_invoiceid_refund_by_paymentmethodidREADView calculated refund amounts for the specified invoice/payment-method. The store is resolved automatically from the invoice. GET /api/v1/invoices/{invoiceId}/refund/{paymentMethodId}. The API key must carry the BTCPay permission `btcpay.store.cancreatepullpayments`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_payment_requests_by_paymentrequestidREADView information about the specified payment request. The store is resolved automatically from the payment request. GET /api/v1/payment-requests/{paymentRequestId}. The API key must carry the BTCPay permission `btcpay.store.canviewpaymentrequests`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_payout_processorsREADGet payout processors available in this instance. GET /api/v1/payout-processors. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_payouts_by_payoutidREADGet payout. GET /api/v1/payouts/{payoutId}. The API key must carry the BTCPay permission `btcpay.store.canmanagepullpayments`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_plan_checkout_by_checkoutidREADRetrieves the details of a plan checkout session. GET /api/v1/plan-checkout/{checkoutId}. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_pull_payments_by_pullpaymentidREADGet a pull payment. GET /api/v1/pull-payments/{pullPaymentId}. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_pull_payments_by_pullpaymentid_lnurlREADGet Pull Payment LNURL details. GET /api/v1/pull-payments/{pullPaymentId}/lnurl. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_pull_payments_by_pullpaymentid_payoutsREADGet payouts. GET /api/v1/pull-payments/{pullPaymentId}/payouts. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_pull_payments_by_pullpaymentid_payouts_by_payoutidREADGet payout. GET /api/v1/pull-payments/{pullPaymentId}/payouts/{payoutId}. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_server_emailREADRetrieve the email settings configured for the server. The password field will be masked if present. GET /api/v1/server/email. The API key must carry the BTCPay permission `btcpay.server.canmodifyserversettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_infoREADInformation about the server, chains and sync states. GET /api/v1/server/info. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it. THE CONNECTION'S HEALTH CHECK, and the probe this provider declares. Chosen because the `API_Key` scheme requires NO permission for it, unlike `GET /api/v1/users/me` (`btcpay.user.canviewprofile`) and `GET /api/v1/api-keys/current` (documented against `btcpay.server.canmanageusers`), either of which would report a perfectly valid store-scoped key as invalid. Also the fastest way to see whether the instance's node and indexer are synced: an unsynced instance answers 200 here while invoice creation behaves oddly.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_balanceREADView balance of the lightning node. GET /api/v1/server/lightning/{cryptoCode}/balance. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_channelsREADView information about the current channels of the lightning node. GET /api/v1/server/lightning/{cryptoCode}/channels. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_histogramREADView balance histogram of the lightning node. GET /api/v1/server/lightning/{cryptoCode}/histogram. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_infoREADView information about the lightning node. GET /api/v1/server/lightning/{cryptoCode}/info. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_invoicesREADView information about the lightning invoices. GET /api/v1/server/lightning/{cryptoCode}/invoices. The API key must carry the BTCPay permission `btcpay.server.canviewlightninginvoiceinternalnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_invoices_by_idREADView information about the requested lightning invoice. GET /api/v1/server/lightning/{cryptoCode}/invoices/{id}. The API key must carry the BTCPay permission `btcpay.server.canviewlightninginvoiceinternalnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_paymentsREADView information about the lightning payments. GET /api/v1/server/lightning/{cryptoCode}/payments. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_lightning_by_cryptocode_payments_by_paymenthashREADView information about the requested lightning payment. GET /api/v1/server/lightning/{cryptoCode}/payments/{paymentHash}. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_server_rolesREADView information about the store's roles at the server's scope. GET /api/v1/server/roles. The API key must carry the BTCPay permission `btcpay.server.canmodifyserversettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_storesREADView information about the available stores. GET /api/v1/stores. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeidREADView information about the specified store. GET /api/v1/stores/{storeId}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_appsREADReturns basic app data for all apps for a store. GET /api/v1/stores/{storeId}/apps. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_emailREADRetrieve the email settings configured for specific store. The password field will be masked if present. GET /api/v1/stores/{storeId}/email. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_invoicesREADView information about the existing invoices. GET /api/v1/stores/{storeId}/invoices. The API key must carry the BTCPay permission `btcpay.store.canviewinvoices`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_addressesREADGet store configured lightning addresses. GET /api/v1/stores/{storeId}/lightning-addresses. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_addresses_by_usernameREADGet store configured lightning address. GET /api/v1/stores/{storeId}/lightning-addresses/{username}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_balanceREADView balance of the lightning node. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/balance. The API key must carry the BTCPay permission `btcpay.store.canuselightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_channelsREADView information about the current channels of the lightning node. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/channels. The API key must carry the BTCPay permission `btcpay.store.cancreatelightninginvoice`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_histogramREADView balance histogram of the lightning node. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/histogram. The API key must carry the BTCPay permission `btcpay.store.canuselightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_infoREADView information about the lightning node. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/info. The API key must carry the BTCPay permission `btcpay.store.canuselightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_invoicesREADView information about the lightning invoices. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/invoices. The API key must carry the BTCPay permission `btcpay.store.canviewlightninginvoice`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_invoices_by_idREADView information about the requested lightning invoice. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/invoices/{id}. The API key must carry the BTCPay permission `btcpay.store.canviewlightninginvoice`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_paymentsREADView information about the lightning payments. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/payments. The API key must carry the BTCPay permission `btcpay.store.cancreatelightninginvoice`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_lightning_by_cryptocode_payments_by_paymenthashREADView information about the requested lightning payment. GET /api/v1/stores/{storeId}/lightning/{cryptoCode}/payments/{paymentHash}. The API key must carry the BTCPay permission `btcpay.store.canuselightningnode`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_offeringsREADRetrieves all offerings associated with the specified store. GET /api/v1/stores/{storeId}/offerings. The API key must carry the BTCPay permission `btcpay.store.canviewofferings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_offerings_by_offeringidREADReturns a specific offering for a store. GET /api/v1/stores/{storeId}/offerings/{offeringId}. The API key must carry the BTCPay permission `btcpay.store.canviewofferings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_offerings_by_offeringid_plans_by_planidREADReturns a specific plan for a given offering. GET /api/v1/stores/{storeId}/offerings/{offeringId}/plans/{planId}. The API key must carry the BTCPay permission `btcpay.store.canviewofferings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_offerings_by_offeringid_subscribers_by_customerselectorREADRetrieves a subscriber for a specific offering by customer selector. GET /api/v1/stores/{storeId}/offerings/{offeringId}/subscribers/{customerSelector}. The API key must carry the BTCPay permission `btcpay.store.canviewofferings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_offerings_by_offeringid_subscribers_by_customerselector_credits_by_currencyREADRetrieves the credit balance for a subscriber in the specified currency. GET /api/v1/stores/{storeId}/offerings/{offeringId}/subscribers/{customerSelector}/credits/{currency}. The API key must carry the BTCPay permission `btcpay.store.canmanagesubscribers`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methodsREADView information about the stores' configured payment methods. GET /api/v1/stores/{storeId}/payment-methods. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted. `includeConfig=true` RETURNS CREDENTIALS FOR THE CUSTOMER'S OWN INFRASTRUCTURE and is not redacted: a lightning payment method's config carries `connectionString`, which routinely embeds a node macaroon, and an on-chain method's carries the wallet's derivation scheme. It is left intact because the matching PUT takes the same value back, so redacting it would break the read-modify-write BTCPay documents -- but do not pass `includeConfig=true` unless the config is what you need, and treat the result as secret when you do. BTCPay gates the flag on `btcpay.store.canmodifystoresettings` for the same reason.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodidREADView information about the stores' configured payment method. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted. Same warning as the listing: `includeConfig=true` can return a lightning `connectionString` (often with a macaroon in it) or a wallet's derivation scheme, unredacted, and BTCPay gates the flag on `btcpay.store.canmodifystoresettings`.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_walletREADView information about the specified wallet. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_addressREADGet or generate address for wallet. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/address. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_feerateREADGet wallet onchain fee rate. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/feerate. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_histogramREADView the balance histogram of the specified wallet. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/histogram. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_objectsREADView wallet objects. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/objects. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_objects_by_objecttype_by_objectidREADView wallet object. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/objects/{objectType}/{objectId}. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_previewREADView addresses of the current payment method of the store. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/preview. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_transactionsREADGet store on-chain wallet transactions. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/transactions. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_transactions_by_transactionidREADGet store on-chain wallet transaction. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/transactions/{transactionId}. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_utxosREADGet store on-chain wallet utxos. GET /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/utxos. The API key must carry the BTCPay permission `btcpay.store.canviewwallet`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payment_requestsREADView information about the existing payment requests. GET /api/v1/stores/{storeId}/payment-requests. The API key must carry the BTCPay permission `btcpay.store.canviewpaymentrequests`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payout_processorsREADGet store configured payout processors. GET /api/v1/stores/{storeId}/payout-processors. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payout_processors_lightningautomatedpayoutsenderfactoryREADGet configured store Lightning automated payout processors. GET /api/v1/stores/{storeId}/payout-processors/LightningAutomatedPayoutSenderFactory. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payout_processors_lightningautomatedpayoutsenderfactory_by_payoutmethodidREADGet configured store Lightning automated payout processors. GET /api/v1/stores/{storeId}/payout-processors/LightningAutomatedPayoutSenderFactory/{payoutMethodId}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payout_processors_onchainautomatedpayoutsenderfactory_by_paymentmethodidREADGet configured store onchain automated payout processors. GET /api/v1/stores/{storeId}/payout-processors/OnChainAutomatedPayoutSenderFactory/{paymentMethodId}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payout_processors_onchainautomatedtransfersenderfactoryREADGet configured store onchain automated payout processors. GET /api/v1/stores/{storeId}/payout-processors/OnChainAutomatedTransferSenderFactory. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_payoutsREADGet payouts. GET /api/v1/stores/{storeId}/payouts. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_stores_by_storeid_pull_paymentsREADGet the pull payments of a store. GET /api/v1/stores/{storeId}/pull-payments. The API key must carry the BTCPay permission `btcpay.store.canmanagepullpayments`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_ratesREADGet rates on the store. GET /api/v1/stores/{storeId}/rates. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_rates_configuration_by_ratesourceREADView rate settings for the specified store and rate source (`primary` or `fallback`). GET /api/v1/stores/{storeId}/rates/configuration/{rateSource}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_rolesREADView information about the specified store's roles. GET /api/v1/stores/{storeId}/roles. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_usersREADView users of the specified store. GET /api/v1/stores/{storeId}/users. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_users_invitationsREADView pending and expired invitations for the specified store. GET /api/v1/stores/{storeId}/users/invitations. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_stores_by_storeid_webhooksREADView webhooks of a store. GET /api/v1/stores/{storeId}/webhooks. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_subscriber_portal_by_portalsessionidREADRetrieves the details of an existing subscriber portal session. GET /api/v1/subscriber-portal/{portalSessionId}. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_api_v1_usersREADLoad all users that exist. GET /api/v1/users. The API key must carry the BTCPay permission `btcpay.server.canviewusers`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_users_by_idoremailREADGet 1 user by ID or Email. GET /api/v1/users/{idOrEmail}. The API key must carry the BTCPay permission `btcpay.server.canviewusers`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_users_meREADView information about the current user. GET /api/v1/users/me. The API key must carry the BTCPay permission `btcpay.user.canviewprofile`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_users_me_notification_settingsREADView information about your notification settings. GET /api/v1/users/me/notification-settings. The API key must carry the BTCPay permission `btcpay.user.canmanagenotificationsforuser`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_users_me_notificationsREADView current user's notifications. GET /api/v1/users/me/notifications. The API key must carry the BTCPay permissions `btcpay.user.canmanagenotificationsforuser`, `btcpay.user.canviewnotificationsforuser`, which are chosen when the key is minted.
btc_pay_server_get_api_v1_users_me_notifications_by_idREADView information about the specified notification. GET /api/v1/users/me/notifications/{id}. The API key must carry the BTCPay permissions `btcpay.user.canmanagenotificationsforuser`, `btcpay.user.canviewnotificationsforuser`, which are chosen when the key is minted.
btc_pay_server_get_api_v1_webhooks_by_webhookidREADView webhook. GET /api/v1/webhooks/{webhookId}. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_webhooks_by_webhookid_deliveriesREADList the latest deliveries to the webhook, ordered from the most recent. GET /api/v1/webhooks/{webhookId}/deliveries. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_webhooks_by_webhookid_deliveries_by_deliveryidREADInformation about a webhook delivery. GET /api/v1/webhooks/{webhookId}/deliveries/{deliveryId}. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted.
btc_pay_server_get_api_v1_webhooks_by_webhookid_deliveries_by_deliveryid_requestREADThe delivery's JSON request sent to the endpoint. GET /api/v1/webhooks/{webhookId}/deliveries/{deliveryId}/request. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted.
btc_pay_server_get_misc_langREADThe supported language codes. GET /misc/lang. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_get_misc_permissionsREADThe metadata of available permissions. GET /misc/permissions. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it. BTCPay'S OWN COPY OF THE PERMISSION VOCABULARY, from the instance you are connected to, with an `included` array per permission saying which other permissions it implies. Call this when you need to know what to tick while minting a key for a particular set of tools -- it is the authoritative answer for THIS instance and version, where the scope list Agentic Fabriq renders is read from the Greenfield specification. Needs no permission.
btc_pay_server_get_misc_rate_sourcesREADView available rate providers that you can use in stores. GET /misc/rate-sources. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_patch_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_transactions_by_transactionidWRITEPatch store on-chain wallet transaction info. PATCH /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/transactions/{transactionId}. The API key must carry the BTCPay permission `btcpay.store.canmanagewallettransactions`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_api_keysWRITECreate a new API Key. POST /api/v1/api-keys. The API key must carry the BTCPay permission `unrestricted`, which is chosen when the key is minted. THE REPLY CONTAINS A LIVE CREDENTIAL AND IT IS NOT REDACTED, because that is the entire point of this call and BTCPay never shows the value again. Treat the result as a secret. Requires an `unrestricted` key (or HTTP Basic, which this integration does not implement), so a store-scoped e-commerce key cannot call it -- which is deliberate on BTCPay's part: a key that could mint keys could escalate itself. The new key inherits nothing it does not ask for, and an API key can never expand its creator's own rights.
btc_pay_server_post_api_v1_invitations_by_tokenWRITEAccept the current user's pending invitation identified by its token. POST /api/v1/invitations/{token}. The API key must carry the BTCPay permission `btcpay.user.canmodifyprofile`, which is chosen when the key is minted. Accepts a store invitation ON BEHALF OF THE ACCOUNT THIS CONNECTION ACTS AS, granting that account access to somebody else's store. The token comes from the invitation e-mail.
btc_pay_server_post_api_v1_invoices_by_invoiceid_payment_methods_by_paymentmethodid_activateWRITEActivate an invoice payment method (if lazy payments mode is enabled). The store is resolved automatically from the invoice. POST /api/v1/invoices/{invoiceId}/payment-methods/{paymentMethodId}/activate. The API key must carry the BTCPay permission `btcpay.store.canviewinvoices`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_invoices_by_invoiceid_refundWRITERefund invoice. The store is resolved automatically from the invoice. POST /api/v1/invoices/{invoiceId}/refund. The API key must carry the BTCPay permission `btcpay.store.cancreatepullpayments`, which is chosen when the key is minted. Creates a PULL PAYMENT the payer can claim against; it does not push coins anywhere by itself and nothing leaves the wallet until a payout is approved and processed. Archive the pull payment to withdraw the offer.
btc_pay_server_post_api_v1_invoices_by_invoiceid_statusWRITEMark an invoice as invalid or settled. The store is resolved automatically from the invoice. POST /api/v1/invoices/{invoiceId}/status. The API key must carry the BTCPay permission `btcpay.store.canmodifyinvoices`, which is chosen when the key is minted. FORCES an invoice's status rather than observing it -- marking an unpaid invoice `Settled` tells the rest of BTCPay, and anything listening to webhooks, that money arrived when it did not. It exists for reconciling out-of-band payments. Reversible only by marking it again.
btc_pay_server_post_api_v1_invoices_by_invoiceid_unarchiveWRITEUnarchive an invoice. The store is resolved automatically from the invoice. POST /api/v1/invoices/{invoiceId}/unarchive. The API key must carry the BTCPay permission `btcpay.store.canmodifyinvoices`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_payment_requests_by_paymentrequestid_payWRITECreate a new invoice for the payment request, or reuse an existing one. The store is resolved automatically from the payment request. POST /api/v1/payment-requests/{paymentRequestId}/pay. The API key must carry the BTCPay permission `btcpay.store.canviewpaymentrequests`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_payouts_by_payoutidWRITEApprove a payout. POST /api/v1/payouts/{payoutId}. The API key must carry the BTCPay permission `btcpay.store.canmanagepullpayments`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_payouts_by_payoutid_markWRITEMark a payout with a state. POST /api/v1/payouts/{payoutId}/mark. The API key must carry the BTCPay permission `btcpay.store.canmanagepullpayments`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_payouts_by_payoutid_mark_paidWRITEMark a payout as paid. POST /api/v1/payouts/{payoutId}/mark-paid. The API key must carry the BTCPay permission `btcpay.store.canmanagepullpayments`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_plan_checkoutWRITECreates a checkout session for purchasing or activating a plan. POST /api/v1/plan-checkout. The API key must carry the BTCPay permission `btcpay.store.canmanagesubscribers`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_plan_checkout_by_checkoutidWRITEContinues a plan checkout session. **Behavior:** - If payment is required, the checkout assigns a BTCPay Server invoice and `invoiceId` will be set. - If no payment is required (for example, the subscriber already has enough credit or no credit purchase is needed), the plan will start immediately and `planStarted` will be `true`. POST /api/v1/plan-checkout/{checkoutId}. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_post_api_v1_pull_payments_by_pullpaymentid_boltcardsWRITELinking a boltcard to a pull payment will allow you to pay via NFC with it, the money will be sent from the pull payment. The boltcard keys are generated using [Deterministic Boltcard Key Generation](https://github.com/boltcard/boltcard/blob/main/docs/DETERMINISTIC.md). POST /api/v1/pull-payments/{pullPaymentId}/boltcards. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_post_api_v1_pull_payments_by_pullpaymentid_payoutsWRITECreate a new payout. POST /api/v1/pull-payments/{pullPaymentId}/payouts. Needs no BTCPay permission: the specification declares this endpoint with an empty permission list, so any valid API key reaches it.
btc_pay_server_post_api_v1_server_lightning_by_cryptocode_addressWRITEGet an on-chain deposit address for the lightning node. POST /api/v1/server/lightning/{cryptoCode}/address. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_server_lightning_by_cryptocode_channelsWRITEOpen a channel with another lightning node. You should connect to that node first. POST /api/v1/server/lightning/{cryptoCode}/channels. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_server_lightning_by_cryptocode_connectWRITEConnect to another lightning node. POST /api/v1/server/lightning/{cryptoCode}/connect. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_server_lightning_by_cryptocode_invoicesWRITECreate a lightning invoice. POST /api/v1/server/lightning/{cryptoCode}/invoices. The API key must carry the BTCPay permission `btcpay.server.cancreatelightninginvoiceinternalnode`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_server_lightning_by_cryptocode_invoices_payWRITEPay a lightning invoice. In case the payment response times out, the status will be reported as pending and the final status can be resolved using the [Get payment](#operation/InternalLightningNodeApi_GetPayment) endpoint. The default wait time for payment responses is 30 seconds — it might take longer if multiple routes are tried or a hold invoice is getting paid. POST /api/v1/server/lightning/{cryptoCode}/invoices/pay. The API key must carry the BTCPay permission `btcpay.server.canuseinternallightningnode`, which is chosen when the key is minted. SPENDS REAL BITCOIN from the SERVER'S INTERNAL node, which every store on the instance may be sharing. Irreversible once settled. BTCPay waits about 30 seconds for a result and then reports `pending`; that is NOT a failure and must not be retried blindly -- resolve it with 'Get a lightning payment made by the server's internal node' using the payment hash, because paying twice is how a retry loses the money twice.
btc_pay_server_post_api_v1_storesWRITECreate a new store (default values can be different if the server settings use a default store template). POST /api/v1/stores. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_apps_crowdfundWRITECreate a new Crowdfund app. POST /api/v1/stores/{storeId}/apps/crowdfund. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_apps_posWRITEPoint of Sale app allows accepting payments for items in a virtual store. POST /api/v1/stores/{storeId}/apps/pos. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_email_sendWRITESend an email using the store's SMTP server. POST /api/v1/stores/{storeId}/email/send. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted. Sends e-mail as the STORE, through the store's own SMTP settings, to whatever addresses the body names. It reaches real inboxes; there is no sandbox.
btc_pay_server_post_api_v1_stores_by_storeid_invoicesWRITECreate a new invoice. POST /api/v1/stores/{storeId}/invoices. The API key must carry the BTCPay permission `btcpay.store.cancreateinvoice`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_lightning_addresses_by_usernameWRITEAdd or update store configured lightning address. POST /api/v1/stores/{storeId}/lightning-addresses/{username}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_lightning_by_cryptocode_addressWRITEGet an on-chain deposit address for the lightning node. POST /api/v1/stores/{storeId}/lightning/{cryptoCode}/address. The API key must carry the BTCPay permission `btcpay.store.cancreatelightninginvoice`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_lightning_by_cryptocode_channelsWRITEOpen a channel with another lightning node. You should connect to that node first. POST /api/v1/stores/{storeId}/lightning/{cryptoCode}/channels. The API key must carry the BTCPay permission `btcpay.store.cancreatelightninginvoice`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_lightning_by_cryptocode_connectWRITEConnect to another lightning node. POST /api/v1/stores/{storeId}/lightning/{cryptoCode}/connect. The API key must carry the BTCPay permission `btcpay.store.cancreatelightninginvoice`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_lightning_by_cryptocode_invoicesWRITECreate a lightning invoice. POST /api/v1/stores/{storeId}/lightning/{cryptoCode}/invoices. The API key must carry the BTCPay permission `btcpay.server.cancreatelightninginvoiceinternalnode`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_lightning_by_cryptocode_invoices_payWRITEPay a lightning invoice. In case the payment response times out, the status will be reported as pending and the final status can be resolved using the [Get payment](#operation/StoreLightningNodeApi_GetPayment) endpoint. The default wait time for payment responses is 30 seconds — it might take longer if multiple routes are tried or a hold invoice is getting paid. POST /api/v1/stores/{storeId}/lightning/{cryptoCode}/invoices/pay. The API key must carry the BTCPay permission `btcpay.store.cancreatelightninginvoice`, which is chosen when the key is minted. SPENDS REAL BITCOIN from the store's lightning node. Irreversible once settled. Same 30-second timeout and the same `pending` reply as the internal-node form: resolve it with 'Get a lightning payment made by a store's node' rather than retrying, because a retry can pay twice.
btc_pay_server_post_api_v1_stores_by_storeid_offeringsWRITECreates a new offering for the specified store. POST /api/v1/stores/{storeId}/offerings. The API key must carry the BTCPay permission `btcpay.store.canmodifyofferings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_offerings_by_offeringid_plansWRITECreates a new plan for a specific offering. POST /api/v1/stores/{storeId}/offerings/{offeringId}/plans. The API key must carry the BTCPay permission `btcpay.store.canmodifyofferings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_offerings_by_offeringid_subscribers_by_customerselector_credits_by_currencyWRITEAdds credit or charges credit for a subscriber in a given currency. POST /api/v1/stores/{storeId}/offerings/{offeringId}/subscribers/{customerSelector}/credits/{currency}. The API key must carry the BTCPay permission `btcpay.store.cancreditsubscribers`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_offerings_by_offeringid_subscribers_by_customerselector_suspendWRITESuspends a subscriber for the specified offering. POST /api/v1/stores/{storeId}/offerings/{offeringId}/subscribers/{customerSelector}/suspend. The API key must carry the BTCPay permission `btcpay.store.canmanagesubscribers`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_offerings_by_offeringid_subscribers_by_customerselector_unsuspendWRITERemoves suspension from a subscriber for the specified offering. POST /api/v1/stores/{storeId}/offerings/{offeringId}/subscribers/{customerSelector}/unsuspend. The API key must carry the BTCPay permission `btcpay.store.canmanagesubscribers`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_generateWRITEGenerate a wallet and update the specified store's payment method to it. POST /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/generate. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted. GENERATES A NEW WALLET AND POINTS THE STORE AT IT, which makes this the most dangerous call on the surface. If the store already has a wallet configured, it is REPLACED: BTCPay will stop watching the old one, and any funds there become unreachable through this store. THE REPLY CARRIES THE SEED PHRASE (`mnemonic`) and Agentic Fabriq does not redact it -- BTCPay's own field description says 'BE SURE TO backup the mnemonic', and it is the only copy that will ever exist, so removing it would destroy the customer's recovery material rather than protect a credential. Capture it somewhere safe and treat the tool result as secret. `savePrivateKeys: false` with no `existingMnemonic` means BTCPay keeps nothing: lose the mnemonic and the funds are gone.
btc_pay_server_post_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_objectsWRITEAdd/Update wallet objects. POST /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/objects. The API key must carry the BTCPay permission `btcpay.store.canmanagewallettransactions`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_objects_by_objecttype_by_objectid_linksWRITEAdd/Update wallet object link. POST /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/objects/{objectType}/{objectId}/links. The API key must carry the BTCPay permission `btcpay.store.canmanagewallettransactions`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_previewWRITEView addresses of a proposed payment method of the store. POST /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/preview. The API key must carry the BTCPay permission `btcpay.store.canmanagewalletsettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_transactionsWRITECreate store on-chain wallet transaction. Requires `btcpay.store.cancreatetransactions` and `btcpay.store.cansigntransactions`. Also requires `btcpay.store.canbroadcasttransactions` when `proceedWithBroadcast` is true, including Payjoin. POST /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/transactions. The API key must carry the BTCPay permissions `btcpay.store.cancreatetransactions`, `btcpay.store.cansigntransactions`, which are chosen when the key is minted. MOVES REAL BITCOIN AND CANNOT BE UNDONE once broadcast. BTCPay's own description names three permissions: `btcpay.store.cancreatetransactions` and `btcpay.store.cansigntransactions` always, plus `btcpay.store.canbroadcasttransactions` when `proceedWithBroadcast` is true (including Payjoin). Send `proceedWithBroadcast: false` to get a signed transaction back WITHOUT publishing it, which is the safe way to have an agent prepare a payment for a human to release. There is no cancel: a broadcast transaction is final.
btc_pay_server_post_api_v1_stores_by_storeid_payment_methods_by_paymentmethodid_wallet_transactions_broadcastWRITEBroadcast a raw transaction hex string or a finalized PSBT for the specified wallet. POST /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}/wallet/transactions/broadcast. The API key must carry the BTCPay permission `btcpay.store.canbroadcasttransactions`, which is chosen when the key is minted. PUBLISHES A TRANSACTION TO THE BITCOIN NETWORK. Irreversible, and it does not care where the hex or the finalized PSBT came from -- this is the release step for anything 'Create store on-chain wallet transaction' prepared with `proceedWithBroadcast: false`.
btc_pay_server_post_api_v1_stores_by_storeid_payment_requestsWRITECreate a new payment request. POST /api/v1/stores/{storeId}/payment-requests. The API key must carry the BTCPay permission `btcpay.store.canmodifypaymentrequests`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_payoutsWRITECreate a new payout. POST /api/v1/stores/{storeId}/payouts. The API key must carry the BTCPay permissions `btcpay.store.cancreatenonapprovedpullpayments`, `btcpay.store.cancreatepullpayments`, which are chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_pull_paymentsWRITEA pull payment allows its receiver to ask for payouts up to `amount` of `currency` every `period`. POST /api/v1/stores/{storeId}/pull-payments. The API key must carry the BTCPay permissions `btcpay.store.cancreatenonapprovedpullpayments`, `btcpay.store.cancreatepullpayments`, which are chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_rates_configuration_previewWRITEPreview rate configuration results before you set it on the store. POST /api/v1/stores/{storeId}/rates/configuration/preview. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_usersWRITEAdd a store user. By default, this creates a store invitation. To add the user directly, set `requireInvitation` to `false`; this requires server settings permission. POST /api/v1/stores/{storeId}/users. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_users_by_idoremail_invitationWRITEGenerate and deliver a new token for an existing pending store invitation. POST /api/v1/stores/{storeId}/users/{idOrEmail}/invitation. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_stores_by_storeid_webhooksWRITECreate a new webhook. POST /api/v1/stores/{storeId}/webhooks. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted. THE REPLY CONTAINS THE WEBHOOK SECRET, deliberately and only here: it is the HMAC key your receiver needs to verify the `BTCPay-Sig` header (`sha256=HMAC256(UTF8(secret), body)`), and `GET /api/v1/webhooks/{webhookId}` does NOT return it -- checked against the sealed schema. Leave `secret` out of the request and BTCPay generates one.
btc_pay_server_post_api_v1_subscriber_portalWRITECreates a portal session that allows a subscriber to manage their subscriptions, view billing details, or update account information. POST /api/v1/subscriber-portal. The API key must carry the BTCPay permission `btcpay.store.canmanagesubscribers`, which is chosen when the key is minted.
btc_pay_server_post_api_v1_usersWRITECreate a new user. This operation can be called without authentication in any of this cases: * There is not any administrator yet on the server, * User registrations are not disabled in the server's policies. If the first administrator is created by this call, user registrations are automatically disabled. POST /api/v1/users. The API key must carry the BTCPay permission `btcpay.server.cancreateuser`, which is chosen when the key is minted. Creates a BTCPay user. Whether an unauthenticated caller may do this depends on the instance's registration policy, and the FIRST user created on a fresh instance becomes the server administrator -- so on a new instance this is an administrator-creation call. Omit `password` and BTCPay e-mails the new user a link to set their own, which keeps the secret out of this request and out of any log that records it.
btc_pay_server_post_api_v1_users_by_idoremail_api_keysWRITECreate a new API Key for a user. POST /api/v1/users/{idOrEmail}/api-keys. The API key must carry the BTCPay permission `btcpay.server.canmanageusers`, which is chosen when the key is minted. THE REPLY CONTAINS A LIVE CREDENTIAL FOR ANOTHER USER and is not redacted, for the same reason as 'Create a new API Key': it is shown once. This is the server-administrator form -- it mints a key that acts as somebody else -- so it is the sharpest privilege on this surface after the wallet tools. Requires an `unrestricted` key.
btc_pay_server_post_api_v1_users_by_idoremail_approveWRITEApprove or unapprove a user. Must be an admin to perform this operation. Attempting to (un)approve a user for which this requirement does not exist will not succeed. POST /api/v1/users/{idOrEmail}/approve. The API key must carry the BTCPay permission `btcpay.user.canmodifyserversettings`, which is chosen when the key is minted. Approves or un-approves another user on an instance whose registration policy requires approval; an un-approved user cannot sign in. Like the lock toggle, the direction comes from the body rather than the verb. THE PERMISSION THIS NEEDS IS UNDOCUMENTED in the same way -- see 'Lock or approve other users' in the permission list.
btc_pay_server_post_api_v1_users_by_idoremail_lockWRITELock or unlock a user. Must be an admin to perform this operation. Attempting to lock the only admin user will not succeed. POST /api/v1/users/{idOrEmail}/lock. The API key must carry the BTCPay permission `btcpay.user.canmodifyserversettings`, which is chosen when the key is minted. Locks or unlocks another user, which immediately stops their keys working. It is a toggle keyed on the body, not on the verb, so read the current state first if you need to be sure which way it will go. THE PERMISSION THIS NEEDS IS UNDOCUMENTED: the specification declares `btcpay.user.canmodifyserversettings` here, and that string is not in the API_Key scheme's permission table -- which lists the administrator permission as `btcpay.server.canmodifyserversettings` instead. Call 'Permissions metadata' on your own instance to see which spelling it really has, and mint the key with the server-administrator permission if the `user.` one is absent.
btc_pay_server_post_api_v1_webhooks_by_webhookid_deliveries_by_deliveryid_redeliverWRITERedeliver the delivery. POST /api/v1/webhooks/{webhookId}/deliveries/{deliveryId}/redeliver. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_apps_crowdfund_by_appidWRITEFull update. GET the app first, modify the data, then PUT the complete payload. PUT /api/v1/apps/crowdfund/{appId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_apps_pos_by_appidWRITEUse this endpoint for updating the properties of a POS app. PUT /api/v1/apps/pos/{appId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_invoices_by_invoiceidWRITEUpdates the specified invoice. The store is resolved automatically from the invoice. PUT /api/v1/invoices/{invoiceId}. The API key must carry the BTCPay permission `btcpay.store.canmodifyinvoices`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_payment_requests_by_paymentrequestidWRITEUpdate a payment request. The store is resolved automatically from the payment request. PUT /api/v1/payment-requests/{paymentRequestId}. The API key must carry the BTCPay permission `btcpay.store.canmodifypaymentrequests`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_server_emailWRITEUpdate server's email settings. PUT /api/v1/server/email. The API key must carry the BTCPay permission `btcpay.server.canmodifyserversettings`, which is chosen when the key is minted. Rewrites the SERVER-WIDE outbound mail configuration, which every store without its own settings falls back to -- a wrong value here silently stops password resets and invoice e-mails for the whole instance. BTCPay never returns the password on the matching GET (it answers a boolean `passwordSet` instead), so read-modify-write does NOT round-trip the password: leave it null to keep the stored one.
btc_pay_server_put_api_v1_stores_by_storeidWRITEUpdate the specified store (default values can be different if the server settings use a default store template). PUT /api/v1/stores/{storeId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_emailWRITEUpdate a store's email settings. PUT /api/v1/stores/{storeId}/email. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_offerings_by_offeringidWRITEUpdates an existing offering for the specified store. PUT /api/v1/stores/{storeId}/offerings/{offeringId}. The API key must carry the BTCPay permission `btcpay.store.canmodifyofferings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_offerings_by_offeringid_plans_by_planidWRITEUpdates an existing plan for a specific offering. PUT /api/v1/stores/{storeId}/offerings/{offeringId}/plans/{planId}. The API key must carry the BTCPay permission `btcpay.store.canmodifyofferings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_offerings_by_offeringid_subscribers_by_customerselector_datesWRITEManually overrides the subscription start date and/or expiration date for a subscriber. Omitting a field leaves the corresponding date unchanged. An empty body `{}` is a no-op and returns the subscriber unchanged. When `expirationDate` is provided, the grace period end and reminder date are recalculated automatically from the plan settings. PUT /api/v1/stores/{storeId}/offerings/{offeringId}/subscribers/{customerSelector}/dates. The API key must carry the BTCPay permission `btcpay.store.canmanagesubscribers`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_payment_methods_by_paymentmethodidWRITEUpdate information about the stores' configured payment method. PUT /api/v1/stores/{storeId}/payment-methods/{paymentMethodId}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_payout_processors_lightningautomatedpayoutsenderfactory_by_payoutmethodidWRITEUpdate configured store Lightning automated payout processors. PUT /api/v1/stores/{storeId}/payout-processors/LightningAutomatedPayoutSenderFactory/{payoutMethodId}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_payout_processors_onchainautomatedpayoutsenderfactory_by_paymentmethodidWRITEUpdate configured store onchain automated payout processors. PUT /api/v1/stores/{storeId}/payout-processors/OnChainAutomatedPayoutSenderFactory/{paymentMethodId}. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_payout_processors_onchainautomatedtransfersenderfactoryWRITEUpdate configured store onchain automated payout processors. PUT /api/v1/stores/{storeId}/payout-processors/OnChainAutomatedTransferSenderFactory. The API key must carry the BTCPay permission `btcpay.store.canviewstoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_rates_configuration_by_ratesourceWRITEUpdate rate settings for the specified store and rate source (`primary` or `fallback`). PUT /api/v1/stores/{storeId}/rates/configuration/{rateSource}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_usersWRITEUpdate the role of an existing store user. The user id or email must be provided in the request body. PUT /api/v1/stores/{storeId}/users. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_stores_by_storeid_users_by_idoremailWRITEUpdate the role of an existing store user. PUT /api/v1/stores/{storeId}/users/{idOrEmail}. The API key must carry the BTCPay permission `btcpay.store.canmodifystoresettings`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_users_meWRITEUpdate the current user. PUT /api/v1/users/me. The API key must carry the BTCPay permission `btcpay.user.canmodifyprofile`, which is chosen when the key is minted. This is where a BTCPay account's PASSWORD and e-mail change, so `currentPassword` is required to move either. It also carries `allowGreenfieldBasicAuth`, the switch that decides whether this instance accepts an e-mail-and-password HTTP Basic credential at all. Agentic Fabriq never uses that path (see the adapter), and turning it OFF is a sensible hardening step that does not affect this connection.
btc_pay_server_put_api_v1_users_me_notification_settingsWRITEUpdates the current user's notification settings. PUT /api/v1/users/me/notification-settings. The API key must carry the BTCPay permission `btcpay.user.canmanagenotificationsforuser`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_users_me_notifications_by_idWRITEUpdates the notification. PUT /api/v1/users/me/notifications/{id}. The API key must carry the BTCPay permission `btcpay.user.canmanagenotificationsforuser`, which is chosen when the key is minted.
btc_pay_server_put_api_v1_webhooks_by_webhookidWRITEUpdate a webhook. PUT /api/v1/webhooks/{webhookId}. The API key must carry the BTCPay permission `btcpay.store.webhooks.canmodifywebhooks`, which is chosen when the key is minted. Sending `secret` here ROTATES it, and every delivery after that is signed with the new value -- a receiver still checking the old one will reject genuine deliveries. Omit the field to leave it alone.
Often connected alongside
Put BTCPay Server behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.