REST API · v1
WeBo Pay API დოკუმენტაცია
გადახდები, ბმულები, ინვოისები და გამოწერები — ერთი ინტეგრაციით. ყველა მაგალითი შეგიძლიათ სცადოთ sandbox გასაღებებით.
Base URL
https://pay.webo.ge/api/v1
ავტორიზაცია
ყველა მოთხოვნა ავთენტიფიცირდება სათაურით Authorization: Bearer sk_test_xxx (ან sk_live_xxx). გასაღებები იქმნება მერჩანტის დაფაზე: API გასაღებები. საიდუმლო გასაღები ნაჩვენებია მხოლოდ ერთხელ შექმნისას.
Key Value წყარო
AuthorizationBearer sk_test_xxxავტორიზაცია
Content-Typeapplication/jsonHeader
Idempotency
გადახდის შექმნისას გამოიყენეთ Idempotency-Key სათაური — იგივე გასაღებით განმეორებითი მოთხოვნა არასდროს ქმნის დუბლიკატ ტრანზაქციას და აბრუნებს პირველი მოთხოვნის შენახულ პასუხს (HTTP 200).
Webhooks
ტრანზაქციის ფინალური სტატუსი დასტურდება მხოლოდ სერვერული webhook-ით. მოვლენების სრული სია და ხელმოწერის შემოწმება →
Webhook მოვლენები
როდესაც ტრანზაქციის ან სხვა ობიექტის სტატუსი იცვლება, თქვენს endpoint-ზე ასინქრონულად იგზავნება HTTP POST მოთხოვნა. Webhook კონფიგურირებულია მერჩანტის დაფაზე (Webhooks) — იქვე იქმნება საიდუმლო გასაღები ხელმოწერისთვის.
მოვლენები 11 ტიპი
მოვლენა როდის იგზავნება
payment.created
ტრანზაქცია შეიქმნა
payment.processing
გადახდა დამუშავებაშია
payment.paid
გადახდა წარმატებულია (ფინალური სტატუსი)
payment.failed
გადახდა ვერ შესრულდა (ფინალური სტატუსი)
payment.refunded
დაბრუნება შესრულდა
payment.cancelled
გადახდა გაუქმდა
invoice.created
ინვოისი შეიქმნა
invoice.paid
ინვოისი გადახდილია
subscription.created
გამოწერა შეიქმნა
subscription.renewed
გამოწერა განახლდა
subscription.failed
გამოწერის გადახდა ვერ შესრულდა
Request headers
Key Value წყარო
X-Webbo-Eventpayment.paidმოვლენის სახელი
X-Webbo-Signaturehex(hmac_sha256(raw_body, secret))ავთენტიფიკაცია
X-Webbo-Delivery01HX…მიწოდების უნიკალური ID (idempotency)
Content-Typeapplication/jsonHeader
Payload სტრუქტურა
Webhook · JSON
{
"id": "01HX9KZV6H8J0L2N4P6R8T0V2",
"event": "payment.paid",
"merchant_id": "01HX9KZV7A1B2C3D4E5F6G7H8",
"environment": "production",
"data": {
"transaction_id": "01HX9KZQ6V7GJ2XW8Y3M4N5P6Q",
"amount": "100.00",
"currency": "GEL",
"status": "paid",
"payment_method": "bank_card"
},
"created_at": "2026-08-23T14:32:10+04:00"
}
ხელმოწერის შემოწმება
PHP Node.js
<?php
// საიდუმლო გასაღები — იქმნება დაფაზე Webhook-ის შექმნისას
$secret = 'whsec_xxxxxxxxxxxxxxxxxxxxxxxx';
$signature = $_SERVER['HTTP_X_WEBBO_SIGNATURE'] ?? '';
$payload = file_get_contents('php://input');
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('invalid signature');
}
// ხელმოწერა სწორია — დაამუშავეთ მოვლენა
$event = json_decode($payload, true);
// იგივე $event['id'] განმეორებით მოთხოვნაზე არ დაამუშავოთ ორჯერ
echo 'ok';
const crypto = require('crypto');
const secret = 'whsec_xxxxxxxxxxxxxxxxxxxxxxxx';
// Express მაგალითი: raw body უნდა მიიღოთ გაუფორმატებლად
function verify(req, rawBody) {
const signature = req.headers['x-webbo-signature'] || '';
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
Retry და საუკეთესო პრაქტიკა
წარუმატებელი მიწოდება მეორდება ექსპონენციალური ბექოფით: 60 წმ → 5 წთ → 15 წთ → 1 სთ → 2 სთ.
პასუხი დააბრუნეთ 200 OK რაც შეიძლება სწრაფად — დამუშავება გააკეთეთ ასინქრონულად.
X-Webbo-Delivery ან event.id შეინახეთ — დუბლიკატ მიწოდებებს ნუ დაამუშავებთ ორჯერ.
ბრაუზერის რედირექტი არ არის გადახდის დადასტურება — წარმატებულად მხოლოდ payment.paid webhook-ი ჩათვალეთ.
POST
https://pay.webo.ge/api/v1/payments
ქმნის ტრანზაქციას და აბრუნებს checkout URL-ს. ბრაუზერის რედირექტი არ არის გადახდის ფინალური დადასტურება — ფინალურ სტატუსს ყოველთვის ანახლებს webhook.
Request headers 3 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
Idempotency-Key
order-123
დუბლიკატების თავიდან ასაცილებლად
პარამეტრები 8
პარამეტრი ტიპი აუცილებელი აღწერა
amount
number
სავალდებულო
თანხა, მინიმუმ 0.01
currency
string
სავალდებულო
GEL | USD | EUR
payment_method
string
არასავალდებულო
bank_card | qr | installment | wallet | …
description
string
არასავალდებულო
ტრანზაქციის აღწერა
customer
object
არასავალდებულო
{ name, email, phone } — მომხმარებელი
return_url
uri
არასავალდებულო
გადამისამართება წარმატებისას
cancel_url
uri
არასავალდებულო
გადამისამართება გაუქმებისას
metadata
object
არასავალდებულო
ნებისმიერი დამატებითი მონაცემი
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request POST \
--url 'https://pay.webo.ge/api/v1/payments' \
--header 'Authorization: Bearer sk_test_xxx' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: order-123' \
--data '{
"amount": "100.00",
"currency": "GEL",
"payment_method": "bank_card",
"description": "შეკვეთა #123",
"customer": {
"name": "გიორგი ბერიძე",
"email": "giorgi@example.com",
"phone": "+995511223344"
},
"return_url": "https://merchant.ge/success",
"cancel_url": "https://merchant.ge/cancel"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/payments',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
'Content-Type: application/json',
'Idempotency-Key: order-123',
],
CURLOPT_POSTFIELDS => json_encode([
'amount' => '100.00',
'currency' => 'GEL',
'payment_method' => 'bank_card',
'description' => 'შეკვეთა #123',
'customer' => [
'name' => 'გიორგი ბერიძე',
'email' => 'giorgi@example.com',
'phone' => '+995511223344',
],
'return_url' => 'https://merchant.ge/success',
'cancel_url' => 'https://merchant.ge/cancel',
]),
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/payments',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_test_xxx',
'Content-Type': 'application/json',
'Idempotency-Key': 'order-123',
},
body: JSON.stringify({
amount: '100.00',
currency: 'GEL',
payment_method: 'bank_card',
description: 'შეკვეთა #123',
customer: {
name: 'გიორგი ბერიძე',
email: 'giorgi@example.com',
phone: '+995511223344',
},
return_url: 'https://merchant.ge/success',
cancel_url: 'https://merchant.ge/cancel',
}),
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZQ6V7GJ2XW8Y3M4N5P6Q",
"status": "pending",
"amount": "100.00",
"currency": "GEL",
"checkout_url": "https://pay.webo.ge/checkout/01HX9KZQ6V7GJ2XW8Y3M4N5P6Q"
}
}
GET
https://pay.webo.ge/api/v1/payments/{uuid}
აბრუნებს ტრანზაქციის მიმდინარე დეტალებს და სტატუსს. სტატუსები: pending, processing, paid, failed, cancelled, refunded, partially_refunded, expired, authorization_required.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 1
პარამეტრი ტიპი აუცილებელი აღწერა
uuid
string
სავალდებულო
ტრანზაქციის საჯარო იდენტიფიკატორი (path)
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request GET \
--url 'https://pay.webo.ge/api/v1/payments/01HX9KZQ6V7GJ2XW8Y3M4N5P6Q' \
--header 'Authorization: Bearer sk_test_xxx'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/payments/01HX9KZQ6V7GJ2XW8Y3M4N5P6Q',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/payments/01HX9KZQ6V7GJ2XW8Y3M4N5P6Q',
{
headers: {
'Authorization': 'Bearer sk_test_xxx',
},
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZQ6V7GJ2XW8Y3M4N5P6Q",
"amount": "100.00",
"fee": "3.00",
"net_amount": "97.00",
"currency": "GEL",
"status": "paid",
"payment_method": "bank_card",
"customer": {
"id": "01HX9KZQ7A1B2C3D4E5F6G7H8",
"name": "გიორგი ბერიძე",
"email": "giorgi@example.com"
},
"paid_at": "2026-08-23T14:32:10+04:00",
"created_at": "2026-08-23T14:30:02+04:00"
}
}
POST
https://pay.webo.ge/api/v1/payments/{uuid}/refund
სრული ან ნაწილობრივი დაბრუნება. დაბრუნებული თანხა არ უნდა აღემატებოდეს დარჩენილ ბალანსს (REFUND_AMOUNT_EXCEEDED).
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 3
პარამეტრი ტიპი აუცილებელი აღწერა
uuid
string
სავალდებულო
ტრანზაქციის ID (path)
amount
number
სავალდებულო
დასაბრუნებელი თანხა
reason
string
არასავალდებულო
დაბრუნების მიზეზი
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request POST \
--url 'https://pay.webo.ge/api/v1/payments/01HX9KZQ6V7GJ2XW8Y3M4N5P6Q/refund' \
--header 'Authorization: Bearer sk_test_xxx' \
--header 'Content-Type: application/json' \
--data '{
"amount": "100.00",
"reason": "დაბრუნება მომხმარებლის მოთხოვნით"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/payments/01HX9KZQ6V7GJ2XW8Y3M4N5P6Q/refund',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'amount' => '100.00',
'reason' => 'დაბრუნება მომხმარებლის მოთხოვნით',
]),
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/payments/01HX9KZQ6V7GJ2XW8Y3M4N5P6Q/refund',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_test_xxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
amount: '100.00',
reason: 'დაბრუნება მომხმარებლის მოთხოვნით',
}),
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZR2C4D6E8F0A1B2C3D4",
"transaction_id": "01HX9KZQ6V7GJ2XW8Y3M4N5P6Q",
"amount": "100.00",
"currency": "GEL",
"status": "succeeded",
"created_at": "2026-08-23T15:05:40+04:00"
}
}
GET
https://pay.webo.ge/api/v1/transactions
აბრუნებს ტრანზაქციების სიას ფილტრებით და პაგინაციით. დაშვებული ფილტრები: status, from, to, per_page.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 4
პარამეტრი ტიპი აუცილებელი აღწერა
status
string
არასავალდებულო
pending | processing | paid | failed | cancelled | refunded | partially_refunded | expired | authorization_required
from
date
არასავალდებულო
პერიოდის დასაწყისი (YYYY-MM-DD)
to
date
არასავალდებულო
პერიოდის დასასრული (YYYY-MM-DD)
per_page
integer
არასავალდებულო
გვერდის ზომა, ნაგულისხმევი 20, მაქსიმუმ 100
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request GET \
--url 'https://pay.webo.ge/api/v1/transactions?status=paid&from=2026-08-01&per_page=25' \
--header 'Authorization: Bearer sk_test_xxx'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/transactions?status=paid&from=2026-08-01&per_page=25',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/transactions?status=paid&from=2026-08-01&per_page=25',
{
headers: {
'Authorization': 'Bearer sk_test_xxx',
},
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": [
{
"id": "01HX9KZQ6V7GJ2XW8Y3M4N5P6Q",
"amount": "100.00",
"currency": "GEL",
"status": "paid",
"payment_method": "bank_card",
"description": "შეკვეთა #123",
"created_at": "2026-08-23T14:30:02+04:00"
}
],
"pagination": {
"total": 42,
"per_page": 25,
"current_page": 1,
"last_page": 2
}
}
POST
https://pay.webo.ge/api/v1/payment-links
ქმნის გადახდის ბმულს. გენერირებული მისამართი: https://pay.webo.ge/pay/{uuid} — მასზე განთავსებულია ჩვენი უსაფრთხო checkout.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 10
პარამეტრი ტიპი აუცილებელი აღწერა
title
string
სავალდებულო
ბმულის სათაური
amount
number
სავალდებულო
თანხა
currency
string
სავალდებულო
GEL | USD | EUR
description
string
არასავალდებულო
აღწერა
fixed_amount
boolean
არასავალდებულო
თანხა ფიქსირებულია (ნაგულისხმევი true)
customer_can_enter_amount
boolean
არასავალდებულო
მომხმარებელი თავად შეიყვანს თანხას
expiration_date
date-time
არასავალდებულო
ვადა
max_payments
integer
არასავალდებულო
გადახდების მაქსიმალური რაოდენობა
success_url
uri
არასავალდებულო
წარმატების გადამისამართება
cancel_url
uri
არასავალდებულო
გაუქმების გადამისამართება
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request POST \
--url 'https://pay.webo.ge/api/v1/payment-links' \
--header 'Authorization: Bearer sk_test_xxx' \
--header 'Content-Type: application/json' \
--data '{
"title": "ვებ ჰოსტინგი",
"amount": "49.90",
"currency": "GEL",
"fixed_amount": true,
"expiration_date": "2026-12-31T23:59:59+04:00"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/payment-links',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'title' => 'ვებ ჰოსტინგი',
'amount' => '49.90',
'currency' => 'GEL',
'fixed_amount' => true,
'expiration_date' => '2026-12-31T23:59:59+04:00',
]),
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/payment-links',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_test_xxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: 'ვებ ჰოსტინგი',
amount: '49.90',
currency: 'GEL',
fixed_amount: true,
expiration_date: '2026-12-31T23:59:59+04:00',
}),
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZS3E5G7I9K1M3O5Q7S",
"title": "ვებ ჰოსტინგი",
"amount": "49.90",
"currency": "GEL",
"active": true,
"url": "https://pay.webo.ge/pay/01HX9KZS3E5G7I9K1M3O5Q7S",
"created_at": "2026-08-23T16:00:00+04:00"
}
}
GET
https://pay.webo.ge/api/v1/payment-links
აბრუნებს მერჩანტის ყველა გადახდის ბმულს ფილტრებით და პაგინაციით.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 2
პარამეტრი ტიპი აუცილებელი აღწერა
active
boolean
არასავალდებულო
მხოლოდ აქტიური/არააქტიური ბმულები (true | false)
per_page
integer
არასავალდებულო
გვერდის ზომა, ნაგულისხმევი 20, მაქსიმუმ 100
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request GET \
--url 'https://pay.webo.ge/api/v1/payment-links' \
--header 'Authorization: Bearer sk_test_xxx'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/payment-links',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/payment-links',
{
headers: {
'Authorization': 'Bearer sk_test_xxx',
},
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": [
{
"id": "01HX9KZS3E5G7I9K1M3O5Q7S",
"title": "ვებ ჰოსტინგი",
"amount": "49.90",
"currency": "GEL",
"active": true,
"url": "https://pay.webo.ge/pay/01HX9KZS3E5G7I9K1M3O5Q7S",
"created_at": "2026-08-23T16:00:00+04:00"
}
],
"pagination": {
"total": 3,
"per_page": 20,
"current_page": 1,
"last_page": 1
}
}
GET
https://pay.webo.ge/api/v1/payment-links/{uuid}
აბრუნებს კონკრეტული ბმულის დეტალებს, მათ შორის გადახდების რაოდენობას.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 1
პარამეტრი ტიპი აუცილებელი აღწერა
uuid
string
სავალდებულო
ბმულის ID (path)
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request GET \
--url 'https://pay.webo.ge/api/v1/payment-links/01HX9KZS3E5G7I9K1M3O5Q7S' \
--header 'Authorization: Bearer sk_test_xxx'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/payment-links/01HX9KZS3E5G7I9K1M3O5Q7S',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/payment-links/01HX9KZS3E5G7I9K1M3O5Q7S',
{
headers: {
'Authorization': 'Bearer sk_test_xxx',
},
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZS3E5G7I9K1M3O5Q7S",
"title": "ვებ ჰოსტინგი",
"description": "წლიური ჰოსტინგი",
"amount": "49.90",
"currency": "GEL",
"active": true,
"payment_count": 1,
"url": "https://pay.webo.ge/pay/01HX9KZS3E5G7I9K1M3O5Q7S",
"created_at": "2026-08-23T16:00:00+04:00"
}
}
POST
https://pay.webo.ge/api/v1/customers
ქმნის ან აახლებს მომხმარებელს ელფოსტით (upsert). იგივე ელფოსტით განმეორებითი მოთხოვნა აბრუნებს არსებულ ჩანაწერს.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 5
პარამეტრი ტიპი აუცილებელი აღწერა
name
string
სავალდებულო
სახელი
email
email
სავალდებულო
ელფოსტა (უნიკალური)
phone
string
არასავალდებულო
ტელეფონი
company
string
არასავალდებულო
კომპანია
metadata
object
არასავალდებულო
დამატებითი მონაცემები
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request POST \
--url 'https://pay.webo.ge/api/v1/customers' \
--header 'Authorization: Bearer sk_test_xxx' \
--header 'Content-Type: application/json' \
--data '{
"name": "გიორგი ბერიძე",
"email": "giorgi@example.com",
"phone": "+995511223344",
"company": "შპს მაგალითი"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/customers',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'გიორგი ბერიძე',
'email' => 'giorgi@example.com',
'phone' => '+995511223344',
'company' => 'შპს მაგალითი',
]),
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/customers',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_test_xxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'გიორგი ბერიძე',
email: 'giorgi@example.com',
phone: '+995511223344',
company: 'შპს მაგალითი',
}),
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZQ7A1B2C3D4E5F6G7H8",
"name": "გიორგი ბერიძე",
"email": "giorgi@example.com",
"phone": "+995511223344",
"company": "შპს მაგალითი",
"created_at": "2026-08-23T16:10:00+04:00"
}
}
GET
https://pay.webo.ge/api/v1/customers/{uuid}
აბრუნებს მომხმარებლის პროფილს, დახარჯულ თანხას და ტრანზაქციების რაოდენობას.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 1
პარამეტრი ტიპი აუცილებელი აღწერა
uuid
string
სავალდებულო
მომხმარებლის ID (path)
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request GET \
--url 'https://pay.webo.ge/api/v1/customers/01HX9KZQ7A1B2C3D4E5F6G7H8' \
--header 'Authorization: Bearer sk_test_xxx'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/customers/01HX9KZQ7A1B2C3D4E5F6G7H8',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/customers/01HX9KZQ7A1B2C3D4E5F6G7H8',
{
headers: {
'Authorization': 'Bearer sk_test_xxx',
},
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZQ7A1B2C3D4E5F6G7H8",
"name": "გიორგი ბერიძე",
"email": "giorgi@example.com",
"phone": "+995511223344",
"company": "შპს მაგალითი",
"total_spent": "1250.00",
"transaction_count": 12,
"created_at": "2026-08-23T16:10:00+04:00"
}
}
POST
https://pay.webo.ge/api/v1/invoices
ქმნის ინვოისს ნივთებით. ინვოისს აქვს გადახდის ბმული და შეიძლება გაიგზავნოს ელფოსტით.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 7
პარამეტრი ტიპი აუცილებელი აღწერა
customer
object
სავალდებულო
{ name, email } — მიმღები
currency
string
სავალდებულო
GEL | USD | EUR
items
array
სავალდებულო
[{ name, quantity, unit_price }] — მინიმუმ 1 ნივთი
due_date
date
არასავალდებულო
გადახდის ვადა
notes
string
არასავალდებულო
შენიშვნა
discount
number
არასავალდებულო
ფასდაკლება
tax
number
არასავალდებულო
გადასახადი % (მაქს 100)
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request POST \
--url 'https://pay.webo.ge/api/v1/invoices' \
--header 'Authorization: Bearer sk_test_xxx' \
--header 'Content-Type: application/json' \
--data '{
"customer": {
"name": "გიორგი ბერიძე",
"email": "giorgi@example.com"
},
"currency": "GEL",
"due_date": "2026-09-30",
"items": [
{
"name": "დიზაინის სერვისი",
"quantity": 1,
"unit_price": 200.00
},
{
"name": "ჰოსტინგი (წლიური)",
"quantity": 1,
"unit_price": 49.90
}
]
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/invoices',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'customer' => [
'name' => 'გიორგი ბერიძე',
'email' => 'giorgi@example.com',
],
'currency' => 'GEL',
'due_date' => '2026-09-30',
'items' => [
['name' => 'დიზაინის სერვისი', 'quantity' => 1, 'unit_price' => 200.00],
['name' => 'ჰოსტინგი (წლიური)', 'quantity' => 1, 'unit_price' => 49.90],
],
]),
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/invoices',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_test_xxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
customer: {
name: 'გიორგი ბერიძე',
email: 'giorgi@example.com',
},
currency: 'GEL',
due_date: '2026-09-30',
items: [
{ name: 'დიზაინის სერვისი', quantity: 1, unit_price: 200.00 },
{ name: 'ჰოსტინგი (წლიური)', quantity: 1, unit_price: 49.90 },
],
}),
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZT4F6H8J0L2N4P6R8T",
"number": "INV-1-2026-00001",
"subtotal": "249.90",
"discount": "0.00",
"tax": "0.00",
"total": "249.90",
"currency": "GEL",
"status": "pending",
"url": "https://pay.webo.ge/invoice/01HX9KZT4F6H8J0L2N4P6R8T",
"created_at": "2026-08-23T16:20:00+04:00"
}
}
GET
https://pay.webo.ge/api/v1/invoices/{uuid}
აბრუნებს ინვოისის დეტალებს, ნივთებს და გადახდის სტატუსს.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 1
პარამეტრი ტიპი აუცილებელი აღწერა
uuid
string
სავალდებულო
ინვოისის ID (path)
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request GET \
--url 'https://pay.webo.ge/api/v1/invoices/01HX9KZT4F6H8J0L2N4P6R8T' \
--header 'Authorization: Bearer sk_test_xxx'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/invoices/01HX9KZT4F6H8J0L2N4P6R8T',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/invoices/01HX9KZT4F6H8J0L2N4P6R8T',
{
headers: {
'Authorization': 'Bearer sk_test_xxx',
},
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZT4F6H8J0L2N4P6R8T",
"number": "INV-1-2026-00001",
"subtotal": "249.90",
"discount": "0.00",
"tax": "0.00",
"total": "249.90",
"currency": "GEL",
"status": "paid",
"due_date": "2026-09-30",
"paid_at": "2026-08-25T10:15:00+04:00",
"url": "https://pay.webo.ge/invoice/01HX9KZT4F6H8J0L2N4P6R8T",
"created_at": "2026-08-23T16:20:00+04:00"
}
}
POST
https://pay.webo.ge/api/v1/subscriptions
ქმნის განმეორებით გადახდას. პირველი გადახდა მიმდინარეობს დაუყოვნებლივ checkout-ით, შემდგომი — ავტომატურად სედიულერით.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 6
პარამეტრი ტიპი აუცილებელი აღწერა
customer
object
სავალდებულო
{ name, email } — გამომწერი
amount
number
სავალდებულო
თანხა პერიოდზე
currency
string
სავალდებულო
GEL | USD | EUR
interval
string
სავალდებულო
daily | weekly | monthly | yearly
interval_count
integer
არასავალდებულო
პერიოდის სიმრავლე (ნაგულისხმევი 1)
gateway
string
არასავალდებულო
გეითვეი (mock | bog | tbc | …)
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request POST \
--url 'https://pay.webo.ge/api/v1/subscriptions' \
--header 'Authorization: Bearer sk_test_xxx' \
--header 'Content-Type: application/json' \
--data '{
"customer": {
"name": "გიორგი ბერიძე",
"email": "giorgi@example.com"
},
"amount": "19.90",
"currency": "GEL",
"interval": "monthly",
"interval_count": 1,
"gateway": "mock"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/subscriptions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'customer' => [
'name' => 'გიორგი ბერიძე',
'email' => 'giorgi@example.com',
],
'amount' => '19.90',
'currency' => 'GEL',
'interval' => 'monthly',
'interval_count' => 1,
'gateway' => 'mock',
]),
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/subscriptions',
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_test_xxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
customer: {
name: 'გიორგი ბერიძე',
email: 'giorgi@example.com',
},
amount: '19.90',
currency: 'GEL',
interval: 'monthly',
interval_count: 1,
gateway: 'mock',
}),
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZU5G7I9K1M3O5Q7S9U",
"amount": "19.90",
"currency": "GEL",
"interval": "monthly",
"interval_count": 1,
"status": "active",
"next_billing_at": "2026-09-23T16:30:00+04:00",
"cancelled_at": null
}
}
GET
https://pay.webo.ge/api/v1/subscriptions/{uuid}
აბრუნებს გამოწერის სტატუსს და შემდეგი გადახდის თარიღს. სტატუსები: trialing, active, past_due, cancelled, expired.
Request headers 2 სათაური
Key Value წყარო
Authorization
Bearer sk_test_xxx
ავტორიზაცია
Content-Type
application/json
Header
პარამეტრები 1
პარამეტრი ტიპი აუცილებელი აღწერა
uuid
string
სავალდებულო
გამოწერის ID (path)
კოდის მაგალითები
cURL
PHP
JavaScript
curl --request GET \
--url 'https://pay.webo.ge/api/v1/subscriptions/01HX9KZU5G7I9K1M3O5Q7S9U' \
--header 'Authorization: Bearer sk_test_xxx'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://pay.webo.ge/api/v1/subscriptions/01HX9KZU5G7I9K1M3O5Q7S9U',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_xxx',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
const response = await fetch(
'https://pay.webo.ge/api/v1/subscriptions/01HX9KZU5G7I9K1M3O5Q7S9U',
{
headers: {
'Authorization': 'Bearer sk_test_xxx',
},
}
);
const data = await response.json();
console.log(data);
Response მაგალითი
Response · JSON
{
"success": true,
"data": {
"id": "01HX9KZU5G7I9K1M3O5Q7S9U",
"amount": "19.90",
"currency": "GEL",
"interval": "monthly",
"interval_count": 1,
"status": "active",
"next_billing_at": "2026-09-23T16:30:00+04:00",
"cancelled_at": null,
"created_at": "2026-08-23T16:30:00+04:00"
}
}
შეცდომის კოდები
შეცდომის სტანდარტული ფორმატი: {"success": false, "error": {"code": "…", "message": "…"}}
HTTP 401
INVALID_API_KEY
გასაღები არასწორია ან არ არსებობს
HTTP 401
API_KEY_REVOKED
გასაღები გაუქმებულია
HTTP 422
INVALID_AMOUNT
თანხა არასწორია
HTTP 422
INVALID_CURRENCY
ვალუტა მხარდაუჭერელია
HTTP 404
PAYMENT_NOT_FOUND
ტრანზაქცია ვერ მოიძებნა
HTTP 400
PAYMENT_FAILED
გადახდა ვერ შესრულდა
HTTP 409
PAYMENT_ALREADY_REFUNDED
გადახდა უკვე დაბრუნებულია
HTTP 422
REFUND_AMOUNT_EXCEEDED
დაბრუნების თანხა აღემატება ბალანსს
HTTP 422
INVALID_IDEMPOTENCY_KEY
Idempotency-Key არასწორია
HTTP 502
GATEWAY_UNAVAILABLE
გადახდის პროვაიდერი მიუწვდომელია
HTTP 400
NO_ACTIVE_GATEWAY
აქტიური გადახდის პროვაიდერი არ არის
HTTP 400
WEBHOOK_SIGNATURE_INVALID
Webhook ხელმოწერა არასწორია
⚠️
ბრაუზერის რედირექტი არ არის გადახდის ფინალური დადასტურება. წარმატებულ გადახდად მხოლოდ webhook-ით დადასტურებული ტრანზაქცია ჩაითვლება.