ping!
Ke aplikasi
Developer · API internal

Katalog & harga

Baca layanan, negara, dan opsi harga sebelum membuat order. Identitas dan harga selalu berasal dari server.

Unduh OpenAPI 3.1
Di halaman ini

Sebelum mengirim request

Katalog memerlukan sesi walaupun hanya dibaca. Jangan mengirim nama layanan, kode ISO negara, atau ID provider sebagai pengganti id dari katalog. Quote bukan reservasi nomor dan dapat berubah saat konfirmasi.

Kontrak nyata, nilai contoh

Endpoint, field, dan status HTTP mengikuti implementasi. Nilai ID, nomor, OTP, waktu, saldo, serta quote di contoh adalah ilustrasi, bukan data akun atau pilihan yang bisa langsung dibeli. Ganti dengan data dari instalasimu. Halaman ini tidak mengirim request atau menjalankan transaksi.

JavaScript dijalankan pada origin aplikasi setelah login. Contoh cURL memakai PING_ORIGIN dan cookie jar PING_COOKIE_JAR dari panduan autentikasi. Sukses memakai { ok: true, data }; create juga HTTP 200, bukan 201. Semua endpoint di halaman ini memerlukan sesi aktif dan dapat mengembalikan 401, 403, atau 500.

Daftar layanan

GET/api/catalog/servicesSession cookie

Source : app/api/catalog/services/route.ts

Mengembalikan layanan yang diaktifkan operator. Respons berupa array tanpa pagination. Filter kategori/pencarian pada UI dilakukan client-side, bukan lewat parameter endpoint ini.

GET /api/catalog/services · JavaScript
const response = await fetch("/api/catalog/services", {
  credentials: "same-origin",
  cache: "no-store",
});
const body = await response.json();

if (!response.ok || !body.ok) {
  throw Object.assign(
    new Error(body.error?.message ?? "Request gagal"),
    { code: body.error?.code, status: response.status },
  );
}

const data = body.data;

Daftar negara

GET/api/catalog/countriesSession cookie

Source : app/api/catalog/countries/route.ts

Mengembalikan negara aktif, diurutkan berdasarkan nama tersimpan. Gunakan id dari respons untuk quote dan order, bukan iso2 atau kode panggilan.

GET /api/catalog/countries · JavaScript
const response = await fetch("/api/catalog/countries", {
  credentials: "same-origin",
  cache: "no-store",
});
const body = await response.json();

if (!response.ok || !body.ok) {
  throw Object.assign(
    new Error(body.error?.message ?? "Request gagal"),
    { code: body.error?.code, status: response.status },
  );
}

const data = body.data;

Ambil penawaran harga

GET/api/catalog/quotesSession cookie

Source : app/api/catalog/quotes/route.ts

Membaca quote satu pasangan layanan/negara, dengan refresh cache provider bila diperlukan. Kedua parameter wajib; parameter query tambahan ditolak. Harga dan opsi tetap divalidasi lagi saat pembelian.

Ambil penawaran harga
ParameterTipeWajibKeterangan
serviceId (query)stringYaService.id dari katalog.
countryId (query)stringYaCountry.id dari katalog.
GET /api/catalog/quotes · JavaScript
const response = await fetch("/api/catalog/quotes?serviceId=service-example&countryId=country-example", {
  credentials: "same-origin",
  cache: "no-store",
});
const body = await response.json();

if (!response.ok || !body.ok) {
  throw Object.assign(
    new Error(body.error?.message ?? "Request gagal"),
    { code: body.error?.code, status: response.status },
  );
}

const data = body.data;
Ambil penawaran harga
Kode errorHTTPTindakan
VALIDATION_ERROR400Periksa tipe, field wajib, format UUID, dan field tambahan.
SERVICE_UNAVAILABLE422Muat ulang katalog dan pilih layanan yang tersedia.
COUNTRY_UNAVAILABLE422Muat ulang katalog dan pilih negara yang tersedia.
PRICE_UNAVAILABLE422Tawarkan pasangan lain atau coba baca quote lagi nanti.
PROVIDER_ERROR502Baca ulang status. Jangan retry pembelian upstream secara otomatis.

Schema · Service

Schema · Service
FieldTipeWajibKeterangan
providertiger | smscodeYatiger = Server 1 (Tiger SMS); smscode = Server 2 (smscode.gg). Katalog, harga, dan pesanan terikat ke server ini; tidak ada perpindahan otomatis.
idstringYaID internal dari katalog server yang dipilih. Bukan nama layanan atau kode provider.
namestringYaNama layanan untuk ditampilkan.
iconstringYaKunci ikon layanan, bukan URL gambar.
categorystringYaLabel kategori untuk tampilan.
descriptionstringYaSesuai tipe yang ditampilkan.

Schema · Country

Schema · Country
FieldTipeWajibKeterangan
providertiger | smscodeYatiger = Server 1 (Tiger SMS); smscode = Server 2 (smscode.gg). Katalog, harga, dan pesanan terikat ke server ini; tidak ada perpindahan otomatis.
idstringYaID internal dari katalog server yang dipilih. Bukan kode ISO atau kode provider.
namestringYaSesuai tipe yang ditampilkan.
flagstringYaLabel bendera untuk tampilan; jangan dipakai sebagai identifier.
dialstringYaKode panggilan negara untuk tampilan.
iso2stringYaKode negara yang tersedia pada metadata.

Schema · Quote

Schema · Quote
FieldTipeWajibKeterangan
providertiger | smscodeYatiger = Server 1 (Tiger SMS); smscode = Server 2 (smscode.gg). Katalog, harga, dan pesanan terikat ke server ini; tidak ada perpindahan otomatis.
serviceIdstringYaSesuai tipe yang ditampilkan.
countryIdstringYaSesuai tipe yang ditampilkan.
price_idrintegerYaHarga opsi pertama. Konfirmasi memakai harga opsi yang dipilih.
qualitative_stockavailable | limitedYaKetersediaan kualitatif, bukan jumlah stok yang dijamin.
optionsQuoteOption[]YaPilihan harga yang tersedia saat quote diambil.
fetched_atstring · date-timeYaISO 8601 dengan zona waktu.
expires_atstring · date-timeYaMasa berlaku cache quote; bukan reservasi harga atau nomor.

Schema · QuoteOption

Schema · QuoteOption
FieldTipeWajibKeterangan
idstringYaID pilihan harga; teruskan sebagai priceOptionId, jangan buat sendiri.
price_idrintegerYaRupiah utuh, bukan sen atau string berformat.
qualitative_stockavailable | limitedYaKetersediaan kualitatif, bukan jumlah stok yang dijamin.
Ping! · Panduan yang tumbuh bersama produknya.Bantuan