No platform dependency
Use it from a custom app, booking flow, internal tool, ecommerce backend or something entirely new.
Platform-agnostic payments
Swish payments, without platform lock-in. One secure API for the software you already use—and the products you have not built yet.
BjornTech Swish API
https://swish.bjorntech.eu
Why BjornTech
Use it from a custom app, booking flow, internal tool, ecommerce backend or something entirely new.
Keep payment creation, status verification, cancellation and refunds behind one clear server-side interface.
Stable instruction IDs, authoritative status checks, controlled retries and optional callbacks are part of the model.
Use cases
Add Swish to a custom storefront or existing commerce backend.
Embed payment capabilities into your own multi-tenant product.
Coordinate Swish requests from a trusted point-of-sale service.
Build controlled payment workflows for your operations team.
Connect Lovable, Bolt and similar builders through secure server functions.
Design the experience around your product instead of a plugin.
How it works
Developer-first
Create with a stable instruction ID, then verify the authoritative result. The API fits behind your application rather than taking it over.
Explore the API// Swish instructionId: 32 uppercase hex chars, no dashes ([0-9A-F]{32}).
const instructionId = crypto.randomUUID().toUpperCase().replaceAll("-", "");
// Signed server-side request — no SDK, just HTTPS + HMAC.
const res = await fetch(
`https://swish.bjorntech.eu/v1/swish/payment-requests/${instructionId}`,
{
method: "PUT",
headers: {
"Content-Type": "application/json",
"X-BjornTech-Access-Key": ACCESS_KEY_ID,
"X-BjornTech-Timestamp": timestamp,
"X-BjornTech-Nonce": nonce,
"X-BjornTech-Signature": signature, // lowercase hex
},
body: JSON.stringify({
payeeAlias: "1231181189",
amount: "249.00",
currency: "SEK",
message: "Order #1042",
}),
}
);
// Creation is acknowledgement — verify the status with an authenticated GET.
const status = await fetch(
`https://swish.bjorntech.eu/v1/swish/payment-requests/${instructionId}`,
{ headers: signedHeaders("GET", path, "") }
);AI builders
Use trusted server functions, protected secret storage, authentication and persistent data. Never sign Swish requests in the browser.
Security boundary
Simple start
Stay under 50 transactions in a month and pay nothing. If you exceed that threshold, a paid BjornTech subscription is required to continue using the service—and the free allowance does not reset the following month. A transaction is a successful payment or refund. Buy your Swish API subscription and check current pricing on BjornTech’s product page.
How the free threshold worksFAQ