API explained with NBP, KSeF and VIES as examples: REST API, webhooks, OpenAPI, API keys and integration security for business.

"We have an API for that" — it's a sentence anyone who talks to developers or a software vendor eventually hears. What is an API? In short: an API (application programming interface) is an agreed way for one program to ask another for data or for an action — without a person involved, without clicking through screens, and without copying data from one window into another.
This article is for business owners and managers who want to understand what their developers are talking about, well enough to ask the right questions. We start with real-world examples, then move to the terms that come up in every conversation about integration: REST API, webhook, OpenAPI, API key. Every definition links to the source that defines it — documentation, a specification, or a standard.
The easiest way to understand an API is through three services many Polish businesses use, often without realising it happens through an API.
An exchange rate from the National Bank of Poland (NBP). An accounting program that enters the euro rate from an NBP table into a foreign-currency invoice doesn't open the bank's website. It sends a request to api.nbp.pl, which — as NBP describes it — "provides a public Web API enabling HTTP clients to run queries" against datasets of current and historical exchange rates and gold prices.
Checking a customer's VAT number. Before invoicing a business customer in another member state without VAT, a seller checks that the customer's VAT number is valid. The European Commission provides the VIES VAT number validation service for this — a REST endpoint that checks a VAT number against the issuing member state's register and returns whether it's valid, together with the registered name and address where available.
E-invoices in KSeF. Since the National e-Invoicing System (KSeF, Krajowy System e-Faktur) came in, an invoicing program issues and fetches invoices through the Ministry of Finance's KSeF API rather than through a person's login. The EU's ViDA reform, with cross-border digital reporting based on structured e-invoices from 1 July 2030, is the background here, but for a Polish company the everyday API is KSeF.
In all three cases the pattern is the same: one program (the client) sends a request in an agreed format, and another (the server) sends back a response, also in an agreed format. That agreement — what requests you can send, what data they need, and what comes back — is exactly what an API is.
Here's what this looks like in practice. Below is a request for the current average euro rate, made on 30 September 2026 following the query patterns published at api.nbp.pl, and the server's response in JSON:
1GET https://api.nbp.pl/api/exchangerates/rates/a/eur/?format=json
1{"table":"A","currency":"euro","code":"EUR","rates":[{"no":"190/A/NBP/2026","effectiveDate":"2026-09-30","mid":4.3672}]}
You don't need to know how to program to read this: table A, the currency euro, the table number, the date and an average rate of PLN 4.3672. An accounting program does exactly the same thing, just inserting the number into the right field itself.
When a developer says "we have a REST API", they mean an API built according to a particular architectural style. The term REST (Representational State Transfer) was introduced by Roy Fielding in his 2000 doctoral dissertation. In chapter 5 he builds it up step by step, adding constraints to a system that starts out with none.
"RESTful API" simply means an API that follows these rules. In everyday use, REST API and RESTful API mean the same thing: an API over HTTP where resources have addresses and operations use standard HTTP methods. Many APIs called "REST" don't satisfy all six constraints to the letter — especially the hypermedia one. For a business using them, that usually doesn't matter; what matters is whether the API is well documented and predictable.
In a REST API, the HTTP method tells the server what to do with a resource. Method semantics are set by the HTTP standard, today RFC 9110:
For a business, the single most important concept from this standard is idempotency. RFC 9110 defines it this way: a method is idempotent "if the intended effect on the server of multiple identical requests with that method is the same as the effect for a single such request." GET, PUT, DELETE and other safe (read-only) methods are idempotent. POST is not.
Why does this matter? Because connections drop. The standard explains that an idempotent request can be safely retried automatically if communication breaks before the client reads the response. Sending "delete invoice no. 15" twice gives the same result as sending it once. Sending "create a payment" twice can create two payments. That's why payment integrations need explicit protection against duplicates — our own web-app cost calculator says exactly that about this line item: payment integration "requires webhook handling, idempotency logic, and compliance testing — not just embedding a checkout widget."
Connection dropped, request retried — what the server receives
Digital Vantage, own diagram based on the definition of idempotency in RFC 9110
Older systems — banking, government, enterprise — often expose an API in a different standard: SOAP. Per the W3C's SOAP 1.2 specification (a Recommendation since 27 April 2007), it is "a lightweight protocol intended for exchanging structured information in a decentralized, distributed environment," built on XML technologies.
The practical difference, from a business perspective, isn't ideological. SOAP is a protocol with its own tightly defined XML message envelope. REST is an architectural style that uses what HTTP already gives you — addresses, methods and status codes — usually carrying data as JSON. If a provider only offers SOAP, integration is entirely possible — it just needs different tooling and usually more work handling the messages. We won't cite statistics on which standard is "more popular", because we didn't find any we'd stand behind.
A plain API works on "ask, and you'll get an answer". If you want to know whether a customer has paid, you have to keep asking. A webhook flips that direction: the system where something happened sends a message, on its own, to an address you've told it to use.
GitHub explains this as simply as possible in its webhook documentation: webhooks let you "receive data as it happens, as opposed to polling an API (calling an API intermittently) to see if data is available." Stripe, the payments operator, writes that once you register a receiving endpoint, "Stripe pushes real-time data to it when events happen in your Stripe account," as JSON over HTTPS.
Calling an API vs a webhook
Based on the GitHub and Stripe webhook documentation, read 2026-09-30
In practice, the two approaches complement each other. A webhook is better when response time matters — a payment, a new order, a shipment-status change. Polling is good enough when data changes rarely, or when a provider simply doesn't offer webhooks at all. Stripe gives recipients one important piece of advice: an endpoint receiving webhooks should return a success code (2xx) quickly, before running any complex logic that could cause a timeout.
The address that receives webhooks is public — anyone can send anything to it, including a fake "order paid" message. That's why serious providers sign every message, and the recipient has to verify that signature.
Stripe-Signature header, generated as an HMAC with SHA-256, using a secret tied to that receiving endpoint. A timestamp is signed together with the message body. The timestamp protects against replaying an intercepted, old message: Stripe's libraries use a default tolerance of 5 minutes between the timestamp and the current time (Stripe, webhooks).X-Hub-Signature-256 header, always prefixed with sha256=. The documentation warns against comparing signatures with a plain == operator, and instead to use a constant-time comparison function — one that can't be guessed by timing the response (GitHub, validating webhook deliveries).HMAC is a signature created with a shared secret: only the sender and the recipient know it, so only they can generate and verify a correct signature. For a business owner, the takeaway is simple: when asking an integration provider about webhooks, also ask whether messages are signed, and whether your system checks that signature.
An API without documentation is like a contract nobody wrote down. OpenAPI is the standard for writing that contract down. The current version of the specification is OpenAPI Specification 3.2.1, published on 10 September 2026. Its opening sentence explains what it's for: "The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic."
In practice, an OpenAPI file lists every API address, method, required field, possible response and authentication method. Tools can generate readable, browsable documentation straight from that file, letting a developer send a test request immediately.
Why does this matter to a business, not just to developers?
That's why, in our own calculator, the "public API / integrations" line item is described, in its own words, as covering "API keys, rate limiting and OpenAPI docs" — not just the underlying code.
An API key is a long, random string that identifies the program sending requests and grants it access. It's most often passed in the Authorization header as a so-called Bearer token — "the bearer": whoever holds it has access. Three practical rules follow from that. A key stays on the server only, never in code visible in a browser and never in an e-mail. Every integration should have its own key, so a leak lets you revoke one key instead of all of them. Keys are worth rotating periodically.
Some providers use the OAuth standard instead of a fixed key, where an application gets a token on behalf of a specific account.
The second element is rate limiting. A provider caps how many requests you can send in a given time, so one client can't overload the service. A well-designed API tells you about this in its responses — for example, headers showing the limit, how many requests remain, and when the limit resets. Your integration has to respect those limits: spread requests out over time, and not retry in a tight loop after being refused.
OWASP, the application-security organisation, publishes its own top ten list of API risks. The 2023 edition looks like this (titles as published, explanations ours):
That last point applies to any business that merely uses other people's APIs: external data has to be checked too. How responsibility for security is actually split when data sits with an external provider is covered in our article on cloud data security.
Most integrations at Polish businesses touch the same few public services. Below is a short list with links to the official documentation.
The most honest integration example we can show is our own. DVN Links is our own product — the EN site describes it as "a European link management platform with analytics and QR codes". The site you're reading uses its public REST API every time an article or page is published — the same API that paying-plan customers get (per its pricing page, API access starts from the Starter plan).
What our site actually does, in plain terms:
POST /links request with the target address and stores the resulting short link and link ID on the document.GET /links/{id} whether the link still exists and where it points.PATCH /links/{id} with the new target. The old short link keeps working and now points to the new address.Two design decisions matter here more than the requests themselves. First, the integration never blocks publishing — if DVN Links doesn't respond, the article publishes anyway, and the error only goes to the logs. Second, without a configured API key, the integration simply does nothing. You can also see the idempotency point from earlier in practice: POST creates a new resource, so before calling it, the site always checks whether a link already exists.
What our site does with the DVN Links API on every publish
Digital Vantage, own diagram
DVN Links' own API has features worth asking any provider about. It's described by an OpenAPI 3.1.0 specification, from which browsable documentation is generated. Every request requires a key passed as a Bearer token in the Authorization header. Rate limits depend on the plan, and every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers.
DVN Links has no webhooks. That makes it an example of polling: our site checks a link's state itself, when it needs to, instead of waiting for a notification. For this use case that's enough, since we only need to check a link at the moment of publishing.
Every API integration replaces work someone at the company currently does by hand: copying orders from a platform into a warehouse system, pasting an exchange rate into an invoice, checking a customer's VAT number before invoicing. The question isn't "should we integrate", but "which manual copying is actually costing us the most".
Integrating via an API usually makes sense when:
Integration doesn't make sense when the action happens rarely, or when a provider has no API, or changes it without notice. In that case, maintaining the integration ends up costing more than doing the work by hand.
The cost of an integration itself depends on its scope — we scope and quote every integration individually, because it depends heavily on the quality of the API on the other side. Our web-app cost calculator gives a rough starting point for the two most common line items: public API integrations, and online-payment integration.
Once several integrations exist and start forming a chain — an order, an invoice, a shipping label, a customer notification — that's already process automation, not a single connection. We cover that in our article on business process automation, and our approach is described on our process automation page. If integrations are meant to be part of a new system, start with our article on what a web application is and our web application development offering. When off-the-shelf tools with built-in integrations aren't enough, there's custom software. We've collected our other articles on web applications in our guide to web applications.
An API is an agreed way for one program to ask another for data or for an action, without a person involved. Example: an accounting program pulls the euro rate straight from the National Bank of Poland's api.nbp.pl service, and a form fills in a trading partner's details from the REGON register through the GUS BIR1 service. An API defines which requests you can send, what data they need, and what comes back in the response.
A REST API is an API built according to the REST architectural style, which Roy Fielding described in his 2000 doctoral dissertation. Every resource — an invoice, a shipment — has its own address, and operations on it use standard HTTP methods: GET fetches, POST creates, PUT replaces, DELETE removes. Every request carries all the information needed to understand it, because the server doesn't store the context of previous requests.
A webhook is a message a provider's system sends, on its own, to your system's address when something happens — for example, when a payment completes. A plain API has to be polled periodically; a webhook arrives the moment the event occurs. The receiving address is public, which is why providers like Stripe or GitHub sign messages with HMAC SHA-256, and the recipient should verify that signature.
An API key is a long, random string that identifies the program sending requests and grants it access to an API. It's usually passed in the Authorization header as a Bearer token, so whoever holds the key has access. Keys should stay on the server only, every integration should have its own key, and keys are worth rotating periodically.
It can be, if a few conditions are met: keys are stored only on the server, the API checks permissions on every record and enforces rate limits, webhooks are signed and verified, and data coming from other people's APIs is validated before use. The OWASP API Security Top 10 2023 lists the most common mistakes — a good starting point for a conversation with whoever builds your integration.
We'll look at what your company still copies by hand, what APIs your providers expose, and whether an integration will actually pay off.
Guides on building apps for businesses: what a web app is, how the project runs, what it costs, how to plan an MVP, and PWA vs mobile apps.
What is an MVP (minimum viable product), how it differs from a proof of concept and a prototype, and how to scope it with the MoSCoW method.
What a PWA is, how the manifest and service worker work, installing it on Android and iPhone, push notifications since iOS 16.4, and what a PWA still cannot do.
Why Poland has no public price list for app development, how to derive an hourly rate from salary data, market medians, our prices and post-launch costs.
How to make an app for your business with a contractor: brief, prototype, sprint development, UAT and go-live. How long each stage takes and where you decide.
How to make a mobile app for a business: Android vs iOS in Poland, native or cross-platform, a DUNS number, closed testing and app review.
A web application is not just a bigger website. The real difference, the types of web application, what they cost and when they are worth building.
Table of Contents · 8 sections · 17 minutes read
Rate this article

Omnichannel in e-commerce: the definition versus multichannel, the shared-inventory mechanism between a store and a till, and when to implement it.

Ecommerce fulfillment: what the service covers, how providers in Poland price it, and when outsourcing your warehouse pays off instead of doing it in-house.

Multi-tenant SaaS: single tenant vs multi-tenant, the silo/pool/bridge models, Row Level Security, GDPR and choosing a model for an MVP.

Cloud computing by the NIST definition: five traits, IaaS, PaaS and SaaS, public, private and hybrid cloud, and how Polish businesses actually use the cloud.

When a free booking calendar is enough, what an online booking system must handle and when a custom module pays off. Vendor prices and our estimate.

Four types described by their job, not by page count. Three questions that settle the choice, and the one thing you cannot add later without rewriting the rest.

91% of WordPress vulnerabilities sit in plugins; six were found in the core. And 46% had no fix on disclosure day, which changes what a routine is for.

Phishing is 30% of incidents registered in Poland, break-ins through code 0.3% (CERT Polska 2025). Securing a website is access control, not plugins.

A free certificate is enough almost every time. When you need a wildcard, why the EV bar disappeared, and what Chrome changes in October 2026.