Referencja API
Linki do płatności
Stałe adresy do zapłaty, z kodem QR.
Klucz testowy w przykładach
Wklej klucz sk_test_ z panelu (zakładka Deweloperzy), a każdy przykład będzie gotowy do uruchomienia. Klucz zostaje w tej karcie przeglądarki, nie wysyłamy go nigdzie.
Przykłady używają Twojego klucza testowego. Produkcyjnego klucza nie przyjmujemy.
Obiekt payment_link#
Link do płatności (plink_): stały adres, który można wysłać mailem, wkleić na stronę albo wydrukować jako kod QR. Każde opłacenie tworzy osobną płatność.
Pola
-
id string wymagane
Identyfikator linku.
-
object string wymagane
Nazwa typu obiektu, zawsze "payment_link".
-
url string (uri) wymagane
Adres strony linku.
-
qr_code_url string (uri)
Kod QR linku jako PNG.
-
qr_svg_url string (uri)
Kod QR linku jako SVG.
-
amount integer | null
Kwota w groszach; null, gdy klient sam wpisuje kwotę.
-
customer_chooses_amount boolean
-
currency string wymaganePLNEURUSD
-
description string | null
-
reusable boolean
true: link przyjmuje wiele płatności; false: po pierwszej udanej zapłacie przestaje przyjmować.
-
collect_tax_id boolean
Strona linku pyta o NIP (faktura dla firmy).
-
connected_account string | null
-
application_fee integer | null
-
active boolean wymagane
Wyłączony link pokazuje stronę bez możliwości zapłaty.
-
metadata object wymagane
Własne pary klucz: wartość (do 50 kluczy, klucz do 40 znaków, wartość tekstowa do 500 znaków). Wracają w obiekcie i w zdarzeniach webhooka. Przy zmianie nowe klucze dochodzą do zapisanych, pusta wartość usuwa klucz, pusty tekst zamiast obiektu czyści wszystko.
-
livemode boolean wymagane
true dla obiektów produkcyjnych (klucz sk_live_), false dla piaskownicy (sk_test_).
-
expires_at integer | null
-
created integer wymagane
Chwila utworzenia jako znacznik czasu Unix (sekundy, UTC).
{
"id": "plink_Ab12Cd34Ef56Gh",
"object": "payment_link",
"url": "https://oplac.pl/Kx7Pq2Mn",
"qr_code_url": "https://oplac.pl/qr/Kx7Pq2Mn.png",
"qr_svg_url": "https://oplac.pl/Kx7Pq2Mn/qr.svg",
"amount": 12900,
"customer_chooses_amount": false,
"currency": "PLN",
"description": "Zamówienie 10482",
"reusable": false,
"collect_tax_id": false,
"connected_account": null,
"application_fee": null,
"active": true,
"metadata": [],
"livemode": false,
"expires_at": null,
"created": 1760000000
}
Utwórz link do płatności#
POST /v1/payment_links
Stały adres do wysłania klientowi albo wydruku jako kod QR. Bez amount klient sam wpisuje kwotę. Każde opłacenie tworzy osobną płatność ze zdarzeniami payment.*.
Nagłówki opcjonalne: Oplac-Version, Idempotency-Key
Treść żądania JSON
-
amount integer
Kwota w groszach; pomiń, żeby klient wpisał kwotę sam. Od 100 do 999999999.
-
currency string wymagane
Waluta. EUR i USD od planu Skala.
PLNEURUSD -
description string
Do 255 znaków.
-
reusable boolean
true: link przyjmuje wiele płatności. Domyślnie
false. -
collect_tax_id boolean
Strona pyta o NIP. Domyślnie
false. -
expires_at integer
Do kiedy strona płatności przyjmuje zapłatę, znacznik czasu Unix w przyszłości. Domyślnie 24 godziny.
-
metadata object
Własne pary klucz: wartość (do 50 kluczy, klucz do 40 znaków, wartość tekstowa do 500 znaków). Wracają w obiekcie i w zdarzeniach webhooka. Przy zmianie nowe klucze dochodzą do zapisanych, pusta wartość usuwa klucz, pusty tekst zamiast obiektu czyści wszystko.
-
connected_account string
Konto sprzedawcy platformy (Connect, plan Platforma), które dostaje płatność po potrąceniu prowizji.
-
application_fee integer
Prowizja platformy w groszach (wymaga connected_account). Od 0.
Odpowiedź
HTTP 201: obiekt payment_link.
Błędy tej operacji:
parameter_missing, parameter_invalid, metadata_invalid, expand_invalid, api_version_invalid, idempotency_key_reused, idempotency_key_invalid, api_key_invalid, provider_not_connected, currency_not_in_plan, sandbox_limit_reached, connect_not_in_plan, rate_limited, api_error .
Każdy błąd to ten sam obiekt error, opisany w przewodniku Błędy.
curl https://oplac.pl/api/v1/payment_links \
-H "Authorization: Bearer sk_test_TWOJ_KLUCZ" \
-H "Idempotency-Key: 5f0c2a4e-7d1b-4e8a-9b2f-1c3d5e7f9a0b" \
-H "Content-Type: application/json" \
-d '{
"amount": 12900,
"currency": "PLN",
"description": "Zamówienie 10482"
}'
$ch = curl_init('https://oplac.pl/api/v1/payment_links');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_TWOJ_KLUCZ',
'Idempotency-Key: 5f0c2a4e-7d1b-4e8a-9b2f-1c3d5e7f9a0b',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'amount' => 12900,
'currency' => 'PLN',
'description' => 'Zamówienie 10482',
]),
CURLOPT_RETURNTRANSFER => true,
]);
$payment_link = json_decode(curl_exec($ch), true);
const res = await fetch('https://oplac.pl/api/v1/payment_links', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_test_TWOJ_KLUCZ',
'Idempotency-Key': '5f0c2a4e-7d1b-4e8a-9b2f-1c3d5e7f9a0b',
'Content-Type': 'application/json',
},
body: JSON.stringify({
amount: 12900,
currency: 'PLN',
description: 'Zamówienie 10482',
}),
});
const paymentLink = await res.json();
import requests
res = requests.post(
"https://oplac.pl/api/v1/payment_links",
headers={
"Authorization": "Bearer sk_test_TWOJ_KLUCZ",
"Idempotency-Key": "5f0c2a4e-7d1b-4e8a-9b2f-1c3d5e7f9a0b",
},
json={
"amount": 12900,
"currency": "PLN",
"description": "Zamówienie 10482",
},
)
payment_link = res.json()
{
"id": "plink_Ab12Cd34Ef56Gh",
"object": "payment_link",
"url": "https://oplac.pl/Kx7Pq2Mn",
"qr_code_url": "https://oplac.pl/qr/Kx7Pq2Mn.png",
"qr_svg_url": "https://oplac.pl/Kx7Pq2Mn/qr.svg",
"amount": 12900,
"customer_chooses_amount": false,
"currency": "PLN",
"description": "Zamówienie 10482",
"reusable": false,
"collect_tax_id": false,
"connected_account": null,
"application_fee": null,
"active": true,
"metadata": [],
"livemode": false,
"expires_at": null,
"created": 1760000000
}
Pobierz link#
GET /v1/payment_links/{id}
Link po identyfikatorze.
Nagłówki opcjonalne: Oplac-Version
Parametry ścieżki
-
id string wymagane
Identyfikator plink_.
Odpowiedź
HTTP 200: obiekt payment_link.
Błędy tej operacji:
parameter_missing, parameter_invalid, metadata_invalid, expand_invalid, api_version_invalid, idempotency_key_reused, idempotency_key_invalid, api_key_invalid, resource_missing, rate_limited, api_error .
Każdy błąd to ten sam obiekt error, opisany w przewodniku Błędy.
curl https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh \
-H "Authorization: Bearer sk_test_TWOJ_KLUCZ"
$ch = curl_init('https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_test_TWOJ_KLUCZ'],
CURLOPT_RETURNTRANSFER => true,
]);
$payment_link = json_decode(curl_exec($ch), true);
const res = await fetch('https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh', {
headers: {Authorization: 'Bearer sk_test_TWOJ_KLUCZ' },
});
const paymentLink = await res.json();
import requests
res = requests.get(
"https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh",
headers={"Authorization": "Bearer sk_test_TWOJ_KLUCZ"},
)
payment_link = res.json()
{
"id": "plink_Ab12Cd34Ef56Gh",
"object": "payment_link",
"url": "https://oplac.pl/Kx7Pq2Mn",
"qr_code_url": "https://oplac.pl/qr/Kx7Pq2Mn.png",
"qr_svg_url": "https://oplac.pl/Kx7Pq2Mn/qr.svg",
"amount": 12900,
"customer_chooses_amount": false,
"currency": "PLN",
"description": "Zamówienie 10482",
"reusable": false,
"collect_tax_id": false,
"connected_account": null,
"application_fee": null,
"active": true,
"metadata": [],
"livemode": false,
"expires_at": null,
"created": 1760000000
}
Zmień link#
POST /v1/payment_links/{id}
active (wyłączenie i ponowne włączenie), description, metadata.
Nagłówki opcjonalne: Oplac-Version, Idempotency-Key
Parametry ścieżki
-
id string wymagane
Identyfikator plink_.
Treść żądania JSON, opcjonalna
-
active boolean
-
description string
Do 255 znaków.
-
metadata object
Własne pary klucz: wartość (do 50 kluczy, klucz do 40 znaków, wartość tekstowa do 500 znaków). Wracają w obiekcie i w zdarzeniach webhooka. Przy zmianie nowe klucze dochodzą do zapisanych, pusta wartość usuwa klucz, pusty tekst zamiast obiektu czyści wszystko.
Odpowiedź
HTTP 200: obiekt payment_link.
Błędy tej operacji:
parameter_missing, parameter_invalid, metadata_invalid, expand_invalid, api_version_invalid, idempotency_key_reused, idempotency_key_invalid, api_key_invalid, resource_missing, rate_limited, api_error .
Każdy błąd to ten sam obiekt error, opisany w przewodniku Błędy.
curl https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh \
-H "Authorization: Bearer sk_test_TWOJ_KLUCZ" \
-H "Content-Type: application/json" \
-d '{
"active": false
}'
$ch = curl_init('https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_TWOJ_KLUCZ',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'active' => false,
]),
CURLOPT_RETURNTRANSFER => true,
]);
$payment_link = json_decode(curl_exec($ch), true);
const res = await fetch('https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_test_TWOJ_KLUCZ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
active: false,
}),
});
const paymentLink = await res.json();
import requests
res = requests.post(
"https://oplac.pl/api/v1/payment_links/plink_Ab12Cd34Ef56Gh",
headers={"Authorization": "Bearer sk_test_TWOJ_KLUCZ"},
json={
"active": False,
},
)
payment_link = res.json()
{
"id": "plink_Ab12Cd34Ef56Gh",
"object": "payment_link",
"url": "https://oplac.pl/Kx7Pq2Mn",
"qr_code_url": "https://oplac.pl/qr/Kx7Pq2Mn.png",
"qr_svg_url": "https://oplac.pl/Kx7Pq2Mn/qr.svg",
"amount": 12900,
"customer_chooses_amount": false,
"currency": "PLN",
"description": "Zamówienie 10482",
"reusable": false,
"collect_tax_id": false,
"connected_account": null,
"application_fee": null,
"active": true,
"metadata": [],
"livemode": false,
"expires_at": null,
"created": 1760000000
}
Lista linków#
GET /v1/payment_links
Linki konta w trybie klucza.
Nagłówki opcjonalne: Oplac-Version
Parametry zapytania
-
limit integer
Liczba obiektów na stronie (1 do 100). Domyślnie
10. Od 1 do 100. -
starting_after string
Identyfikator obiektu; zwraca starsze od niego (następna strona).
-
ending_before string
Identyfikator obiektu; zwraca nowsze od niego (poprzednia strona). Nie łączyć ze starting_after.
-
created object
Filtr po chwili utworzenia (Unix): created[gte]=1760000000.
-
gt integer
-
gte integer
-
lt integer
-
lte integer
-
-
active boolean
Tylko włączone (true) albo wyłączone (false).
Odpowiedź
HTTP 200:
lista {object: "list", url, has_more, data} z obiektami
payment_link od najnowszego. Stronicowanie kursorem opisuje przewodnik.
Błędy tej operacji:
parameter_missing, parameter_invalid, metadata_invalid, expand_invalid, api_version_invalid, idempotency_key_reused, idempotency_key_invalid, api_key_invalid, rate_limited, api_error .
Każdy błąd to ten sam obiekt error, opisany w przewodniku Błędy.
curl "https://oplac.pl/api/v1/payment_links?limit=3" \
-H "Authorization: Bearer sk_test_TWOJ_KLUCZ"
$ch = curl_init('https://oplac.pl/api/v1/payment_links?limit=3');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer sk_test_TWOJ_KLUCZ'],
CURLOPT_RETURNTRANSFER => true,
]);
$payment_links = json_decode(curl_exec($ch), true);
const res = await fetch('https://oplac.pl/api/v1/payment_links?limit=3', {
headers: {Authorization: 'Bearer sk_test_TWOJ_KLUCZ' },
});
const paymentLinks = await res.json();
import requests
res = requests.get(
"https://oplac.pl/api/v1/payment_links?limit=3",
headers={"Authorization": "Bearer sk_test_TWOJ_KLUCZ"},
)
payment_links = res.json()
{
"object": "list",
"url": "/v1/payment_links",
"has_more": false,
"data": [
{
"id": "plink_Ab12Cd34Ef56Gh",
"object": "payment_link",
"url": "https://oplac.pl/Kx7Pq2Mn",
"qr_code_url": "https://oplac.pl/qr/Kx7Pq2Mn.png",
"qr_svg_url": "https://oplac.pl/Kx7Pq2Mn/qr.svg",
"amount": 12900,
"customer_chooses_amount": false,
"currency": "PLN",
"description": "Zamówienie 10482",
"reusable": false,
"collect_tax_id": false,
"connected_account": null,
"application_fee": null,
"active": true,
"metadata": [],
"livemode": false,
"expires_at": null,
"created": 1760000000
}
]
}
Klucz testowy dostajesz od razu po zapisie
Adres e-mail, kod z maila i piaskownica z kodami BLIK. Produkcję włączasz sam w panelu: plan, dostawca płatności, klucz sk_live_. Wolisz, żeby wdrożenie w sklepie zrobił nasz zespół? To też jest za darmo.