REST API · v1

WeBo Pay API დოკუმენტაცია

გადახდები, ბმულები, ინვოისები და გამოწერები — ერთი ინტეგრაციით. ყველა მაგალითი შეგიძლიათ სცადოთ sandbox გასაღებებით.

Base URL https://pay.webo.ge/api/v1
ავტორიზაცია

ყველა მოთხოვნა ავთენტიფიცირდება სათაურით Authorization: Bearer sk_test_xxx (ან sk_live_xxx). გასაღებები იქმნება მერჩანტის დაფაზე: API გასაღებები. საიდუმლო გასაღები ნაჩვენებია მხოლოდ ერთხელ შექმნისას.

KeyValueწყარო
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

KeyValueწყარო
X-Webbo-Eventpayment.paidმოვლენის სახელი
X-Webbo-Signaturehex(hmac_sha256(raw_body, secret))ავთენტიფიკაცია
X-Webbo-Delivery01HX…მიწოდების უნიკალური ID (idempotency)
Content-Typeapplication/jsonHeader

Payload სტრუქტურა

{
  "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
// საიდუმლო გასაღები — იქმნება დაფაზე 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 სათაური

KeyValueწყარო
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 --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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
Authorization Bearer sk_test_xxx ავტორიზაცია
Content-Type application/json Header

პარამეტრები 1

პარამეტრიტიპიაუცილებელიაღწერა
uuid string სავალდებულო ტრანზაქციის საჯარო იდენტიფიკატორი (path)

კოდის მაგალითები

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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
Authorization Bearer sk_test_xxx ავტორიზაცია
Content-Type application/json Header

პარამეტრები 3

პარამეტრიტიპიაუცილებელიაღწერა
uuid string სავალდებულო ტრანზაქციის ID (path)
amount number სავალდებულო დასაბრუნებელი თანხა
reason string არასავალდებულო დაბრუნების მიზეზი

კოდის მაგალითები

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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
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 --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 მაგალითი

{
  "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/customers

ქმნის ან აახლებს მომხმარებელს ელფოსტით (upsert). იგივე ელფოსტით განმეორებითი მოთხოვნა აბრუნებს არსებულ ჩანაწერს.

Request headers 2 სათაური

KeyValueწყარო
Authorization Bearer sk_test_xxx ავტორიზაცია
Content-Type application/json Header

პარამეტრები 5

პარამეტრიტიპიაუცილებელიაღწერა
name string სავალდებულო სახელი
email email სავალდებულო ელფოსტა (უნიკალური)
phone string არასავალდებულო ტელეფონი
company string არასავალდებულო კომპანია
metadata object არასავალდებულო დამატებითი მონაცემები

კოდის მაგალითები

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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
Authorization Bearer sk_test_xxx ავტორიზაცია
Content-Type application/json Header

პარამეტრები 1

პარამეტრიტიპიაუცილებელიაღწერა
uuid string სავალდებულო მომხმარებლის ID (path)

კოდის მაგალითები

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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
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 --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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
Authorization Bearer sk_test_xxx ავტორიზაცია
Content-Type application/json Header

პარამეტრები 1

პარამეტრიტიპიაუცილებელიაღწერა
uuid string სავალდებულო ინვოისის ID (path)

კოდის მაგალითები

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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
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 --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 მაგალითი

{
  "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 სათაური

KeyValueწყარო
Authorization Bearer sk_test_xxx ავტორიზაცია
Content-Type application/json Header

პარამეტრები 1

პარამეტრიტიპიაუცილებელიაღწერა
uuid string სავალდებულო გამოწერის ID (path)

კოდის მაგალითები

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 მაგალითი

{
  "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-ით დადასტურებული ტრანზაქცია ჩაითვლება.