Dokumentasi API

Semua yang Anda butuhkan untuk integrasi: autentikasi, setiap endpoint lengkap dengan parameter dan contoh respons, kode siap tempel dalam lima bahasa, penanganan error, dan sistem poin.

base URL
https://v1.api.my.id

Mulai cepat

Dua endpoint gratis dan tidak butuh key sama sekali β€” coba sekarang juga, lalu buat akun untuk endpoint lainnya.

1

Panggil endpoint gratis

Hari libur dan jadwal sholat jalan tanpa key apa pun.

2

Dapatkan API key

Buat akun gratis β€” key pertama langsung terbit. 5.000 hits gratis/bulan per akun.

3

Kirim sebagai Bearer token

Authorization: Bearer <key> di setiap panggilan terproteksi.

COBA β€” TANPA KEY
# Hari libur nasional 2026 (17 libur + 8 cuti bersama)
curl "https://v1.api.my.id/holidays?year=2026"

# Jadwal sholat Jakarta hari ini
curl "https://v1.api.my.id/sholat?city=jakarta"
DAPATKAN KEY
# 1. Buat akun. Key pertama Anda langsung terbit.
curl -X POST "https://v1.api.my.id/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"name": "Nama Anda", "email": "anda@perusahaan.com", "password": "min-8-karakter"}'

# β†’ {"data": {"api_key": "myid_live_…", "session_token": "…", "monthly_quota": 5000}}
# Simpan api_key ini β€” hanya ditampilkan sekali.

# 2. Butuh key tambahan nanti? Pakai sesi login, bukan API key.
curl -X POST "https://v1.api.my.id/keys/register" \
  -H "Authorization: Session $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"label": "produksi"}'
Key terikat ke akun. Tidak ada key anonim: menerbitkan key butuh sesi login. Poin, kuota, dan langganan menempel di akun, jadi semua key Anda memakai saldo yang sama β€” dan mencabut key tidak pernah menghanguskan poin.

Autentikasi

Kirim key Anda di setiap endpoint terproteksi. Dua bentuk header diterima β€” pakai yang paling mudah di HTTP client Anda.

Authorization: Bearer myid_live_a1b2c3d4…
# atau
X-API-Key: myid_live_a1b2c3d4…
Simpan key di sisi server. Siapa pun yang memegang key bisa memakai poin dan kuota Anda. Jangan pernah menaruhnya di JavaScript frontend atau aplikasi mobile β€” proxy panggilannya lewat backend Anda sendiri.

Error, limit & poin

Semua respons memakai amplop yang sama. Error selalu membawa pesan yang bisa langsung Anda log atau tampilkan.

// sukses
{ "status": "success", "code": 200, "data": … }

// error
{ "status": "error", "code": 401, "message": "A valid API key is required…" }
CodeArtiYang harus dilakukan
200SuksesBaca field data.
201Key dibuatSimpan api_key β€” hanya sekali.
400Request salahParameter wajib hilang atau formatnya salah.
401Key tidak validPeriksa header Authorization.
402Poin kurangTop up: POST /billing/topup. Error menyebutkan needed vs balance.
404Tidak ditemukanEndpoint, kota, atau resource tidak dikenal.
422Tidak bisa diprosesmis. koordinat di luar Indonesia, IP privat.
429Kuota habis5.000 hits gratis/bulan terpakai. Berlangganan untuk lebih.
501Belum aktifProduk butuh provider eksternal β€” lihat pesannya.
502Upstream gagalCoba lagi. Poin dikembalikan otomatis pada endpoint AI.

Rate limit

Setiap key mendapat 5.000 hits gratis per bulan untuk endpoint bermeter. Setiap respons membawa pemakaian Anda agar bisa mundur sebelum kena limit:

X-RateLimit-Limit: 5000
X-RateLimit-Used: 128

Cara kerja poin

Endpoint AI dibayar per pemakaian dengan poin. 1 IDR = 1 poin. Poin hanya dipotong saat hit berhasil, dan otomatis dikembalikan bila upstream gagal.

EndpointBiaya
POST /ocr/ktp150 poin
POST /ocr/sim300 poin
POST /cv/extract300 poin
POST /image/remove-bg300 poin
POST /articles/generate1.300 poin

Referensi endpoint

πŸ“…

Hari Libur Nasional

Gratis

Kalender libur nasional dan cuti bersama Indonesia sesuai SKB 3 Menteri. Gratis, tanpa API key.

GET /holidays βœ“ Tanpa API key Coba β†’

Semua libur untuk satu tahun (2025 & 2026).

PARAMETER QUERY
year int opsional Tahun. Default: tahun berjalan.
CURL
curl "https://v1.api.my.id/holidays?year=2026"
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "year": 2026,
  "count": 25,
  "data": [
    {
      "date": "2026-08-17",
      "day": "Senin",
      "name": "Hari Kemerdekaan Republik Indonesia",
      "type": "national",
      "is_national": true,
      "is_cuti_bersama": false
    }
  ]
}
GET /holidays/upcoming βœ“ Tanpa API key Coba β†’

Libur terdekat dari hari ini.

PARAMETER QUERY
limit int opsional 1–20. Default 5.
CURL
curl "https://v1.api.my.id/holidays/upcoming?limit=3"
GET /holidays/check βœ“ Tanpa API key Coba β†’

Cek apakah sebuah tanggal adalah hari libur.

PARAMETER QUERY
date string wajib Format YYYY-MM-DD.
CURL
curl "https://v1.api.my.id/holidays/check?date=2026-08-17"
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "data": {
    "date": "2026-08-17",
    "is_holiday": true,
    "holidays": [ { "name": "Hari Kemerdekaan Republik Indonesia", "type": "national", … } ]
  }
}
πŸ•Œ

Jadwal Sholat

Gratis

Waktu sholat harian dihitung dengan algoritma posisi matahari standar (sudut Kemenag: Subuh βˆ’20Β°, Isya βˆ’18Β°, ihtiyat +2 menit). Gratis, tanpa API key.

GET /sholat βœ“ Tanpa API key Coba β†’

Jadwal sholat untuk satu kota dan tanggal.

PARAMETER QUERY
city string wajib Slug kota, mis. jakarta. Lihat /sholat/cities.
date string opsional YYYY-MM-DD. Default hari ini.
CURL
curl "https://v1.api.my.id/sholat?city=jakarta&date=2026-07-09"
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "data": {
    "city": { "slug": "jakarta", "name": "Jakarta", "lat": -6.2088, "lng": 106.8456 },
    "date": "2026-07-09",
    "timezone": "WIB",
    "gmt_offset": "+7",
    "jadwal": {
      "imsak": "04:31", "subuh": "04:41", "terbit": "06:04", "dhuha": "06:28",
      "dzuhur": "12:00", "ashar": "15:20", "maghrib": "17:53", "isya": "19:06"
    }
  }
}
GET /sholat/cities βœ“ Tanpa API key Coba β†’

54 kota yang didukung (WIB/WITA/WIT).

CURL
curl "https://v1.api.my.id/sholat/cities"
πŸ”‘

Akun & API Keys

Gratis

Buat akun, lalu terbitkan API key. Setiap key terikat ke sebuah akun β€” tidak ada key anonim. Sesi disimpan di cookie myid_session pada domain .api.my.id, jadi satu login berlaku untuk seluruh situs. Key hanya ditampilkan sekali β€” simpan baik-baik.

POST /auth/register βœ“ Tanpa API key Coba β†’

Buat akun baru. Langsung dapat satu API key + sesi login.

BODY REQUEST
{ "name": "Nama Anda", "email": "anda@perusahaan.com", "password": "min-8-karakter" }
CURL
curl -X POST "https://v1.api.my.id/auth/register" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Nama Anda", "email": "anda@perusahaan.com", "password": "min-8-karakter" }'
CONTOH RESPONS
{
  "status": "success",
  "code": 201,
  "message": "Account created. Store this API key safely β€” it is shown only once.",
  "data": {
    "user": { "id": 1, "name": "Nama Anda", "email": "anda@perusahaan.com" },
    "api_key": "myid_live_a1b2c3d4e5f6…",
    "key_hint": "myid_live_a1b2…",
    "monthly_quota": 5000,
    "session_token": "…",
    "expires_at": "2026-08-11T00:00:00Z"
  }
}
POST /auth/login βœ“ Tanpa API key Coba β†’

Masuk. Menyetel cookie sesi (dan mengembalikan session_token untuk klien non-browser).

BODY REQUEST
{ "email": "anda@perusahaan.com", "password": "…" }
CURL
curl -X POST "https://v1.api.my.id/auth/login" \
  -H "Content-Type: application/json" \
  -d '{ "email": "anda@perusahaan.com", "password": "…" }'
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "message": "Signed in.",
  "data": { "user": { "id": 1, "email": "anda@perusahaan.com" }, "expires_at": "…" }
}
GET /auth/me πŸ‘€ Butuh login Coba β†’

Akun yang sedang masuk, beserta daftar key dan saldo poin.

CURL
curl "https://v1.api.my.id/auth/me" \
  -H "Authorization: Session $SESSION_TOKEN"
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "data": {
    "user": { "id": 1, "name": "Nama Anda", "email": "anda@perusahaan.com" },
    "keys": [{ "id": 7, "key_hint": "myid_live_a1b2…", "points": 0 }],
    "points": 0,
    "monthly_quota": 5000
  }
}
POST /auth/logout πŸ‘€ Butuh login Coba β†’

Keluar dan hapus sesi.

CURL
curl -X POST "https://v1.api.my.id/auth/logout" \
  -H "Authorization: Session $SESSION_TOKEN"
POST /keys/register πŸ‘€ Butuh login Coba β†’

Terbitkan API key baru untuk akun yang sedang masuk. Butuh sesi login β€” maks. 10 key aktif.

BODY REQUEST
{ "label": "Playground" }
CURL
curl -X POST "https://v1.api.my.id/keys/register" \
  -H "Authorization: Session $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "label": "Playground" }'
CONTOH RESPONS
{
  "status": "success",
  "code": 201,
  "message": "Store this key safely β€” it is shown only once.",
  "data": {
    "api_key": "myid_live_a1b2c3d4e5f6…",
    "key_hint": "myid_live_a1b2…",
    "label": "Playground",
    "monthly_quota": 5000
  }
}
POST /auth/password πŸ‘€ Butuh login Coba β†’

Ganti password. Semua sesi lain otomatis dikeluarkan.

BODY REQUEST
{ "current_password": "…", "new_password": "min-8-karakter" }
CURL
curl -X POST "https://v1.api.my.id/auth/password" \
  -H "Authorization: Session $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "current_password": "…", "new_password": "min-8-karakter" }'
CONTOH RESPONS
{ "status": "success", "code": 200, "message": "Password changed. Every other session has been signed out." }
POST /auth/profile πŸ‘€ Butuh login Coba β†’

Ubah nama tampilan. Email tidak bisa diubah β€” ia mengidentifikasi akun.

BODY REQUEST
{ "name": "Nama Baru" }
CURL
curl -X POST "https://v1.api.my.id/auth/profile" \
  -H "Authorization: Session $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Nama Baru" }'
POST /auth/logout-all πŸ‘€ Butuh login Coba β†’

Keluar dari semua perangkat lain. Sesi di perangkat ini tetap aktif.

CURL
curl -X POST "https://v1.api.my.id/auth/logout-all" \
  -H "Authorization: Session $SESSION_TOKEN"
DELETE /keys/{id} πŸ‘€ Butuh login Coba β†’

Cabut salah satu key milik akun Anda.

PARAMETER QUERY
id int wajib ID key (dari /auth/me).
CURL
curl -X DELETE "https://v1.api.my.id/keys/7" \
  -H "Authorization: Session $SESSION_TOKEN"
GET /keys/me πŸ”‘ Butuh API key Coba β†’

Info key: pemakaian bulan ini, saldo poin, langganan aktif.

CURL
curl "https://v1.api.my.id/keys/me" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "data": {
    "key_hint": "myid_live_a1b2…",
    "month": "2026-07",
    "quota": 5000,
    "used_this_month": 128,
    "remaining": 4872,
    "points": 50000,
    "active_subscriptions": [
      { "product_id": "wilayah-indonesia", "tier": "Pro", "monthly_quota": 25000, "expires_at": "2026-08-09T…" }
    ],
    "by_endpoint": [ { "endpoint": "wilayah/provinces", "hits": 40 } ]
  }
}
πŸ—ΊοΈ

Wilayah Indonesia

Langganan

Data administratif Indonesia lengkap: 34 provinsi, 514 kab/kota, 7.215 kecamatan, 80.534 kelurahan/desa (kode Kemendagri). Semua endpoint mendukung paginasi.

GET /wilayah/provinces πŸ”‘ Butuh API key Coba β†’

Semua provinsi.

PARAMETER QUERY
page int opsional Default 1.
per_page int opsional 1–500. Default 100.
CURL
curl "https://v1.api.my.id/wilayah/provinces" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "page": 1, "per_page": 100, "total": 34, "total_pages": 1, "count": 34,
  "data": [ { "code": "32", "name": "JAWA BARAT" } ]
}
GET /wilayah/regencies πŸ”‘ Butuh API key Coba β†’

Kabupaten/kota dalam satu provinsi.

PARAMETER QUERY
province string wajib Kode provinsi, mis. 32.
CURL
curl "https://v1.api.my.id/wilayah/regencies?province=32" \
  -H "Authorization: Bearer $API_KEY"
GET /wilayah/districts πŸ”‘ Butuh API key Coba β†’

Kecamatan dalam satu kabupaten/kota.

PARAMETER QUERY
regency string wajib Kode kab/kota, mis. 3204.
CURL
curl "https://v1.api.my.id/wilayah/districts?regency=3204" \
  -H "Authorization: Bearer $API_KEY"
GET /wilayah/villages πŸ”‘ Butuh API key Coba β†’

Kelurahan/desa dalam satu kecamatan.

PARAMETER QUERY
district string wajib Kode kecamatan, mis. 3204010.
CURL
curl "https://v1.api.my.id/wilayah/villages?district=3204010" \
  -H "Authorization: Bearer $API_KEY"
GET /wilayah/search πŸ”‘ Butuh API key Coba β†’

Cari nama wilayah lintas semua tingkat sekaligus.

PARAMETER QUERY
q string wajib Minimal 3 karakter.
limit int opsional 1–100. Default 25.
CURL
curl "https://v1.api.my.id/wilayah/search?q=menteng" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success", "code": 200, "query": "menteng", "count": 3,
  "data": [
    { "code": "3173020", "name": "MENTENG", "level": "district", "parent_code": "3173" },
    { "code": "3171090001", "name": "MENTENG DALAM", "level": "village", "parent_code": "3171090" }
  ]
}
🏫

Data Fasilitas

Langganan

Sekolah (215.333, Dapodik), perguruan tinggi (4.759, PDDikti), dan rumah sakit (3.116, SIRS Kemenkes). Semua mendukung paginasi & filter.

GET /schools πŸ”‘ Butuh API key Coba β†’

Cari sekolah se-Indonesia, lengkap dengan koordinat GPS.

PARAMETER QUERY
q string opsional Cari nama sekolah.
npsn string opsional Cari berdasarkan NPSN.
bentuk string opsional SD, SMP, SMA, SMK, SLB…
status string opsional N (negeri) atau S (swasta).
province string opsional Kode provinsi Dapodik.
regency string opsional Kode kab/kota Dapodik.
CURL
curl "https://v1.api.my.id/schools?q=SMA Negeri 1&bentuk=SMA&status=N" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success", "code": 200, "total": 749, "count": 1,
  "source": "Dapodik/Kemdikbud",
  "data": [
    {
      "npsn": "20106343", "name": "SMA NEGERI 1 CIAWIGEBANG", "bentuk": "SMA", "status": "N",
      "province": "Jawa Barat", "regency": "Kab. Kuningan", "district": "Ciawigebang",
      "address": "Jl. Siliwangi No. 1", "lat": -6.974, "lng": 108.5894
    }
  ]
}
GET /universities πŸ”‘ Butuh API key Coba β†’

Perguruan tinggi (universitas, institut, politeknik, sekolah tinggi, akademi).

PARAMETER QUERY
q string opsional Cari nama kampus.
type string opsional Universitas / Institut / Politeknik / Sekolah Tinggi / Akademi.
lldikti int opsional Wilayah LLDikti 1–16.
CURL
curl "https://v1.api.my.id/universities?q=institut teknologi" \
  -H "Authorization: Bearer $API_KEY"
GET /hospitals πŸ”‘ Butuh API key Coba β†’

Rumah sakit se-Indonesia dengan nama wilayah.

PARAMETER QUERY
q string opsional Cari nama RS.
type string opsional RSUD, RS Umum, RS Jiwa, RS Ibu dan Anak…
province string opsional Kode provinsi Kemendagri, mis. 32.
regency string opsional Kode kab/kota.
CURL
curl "https://v1.api.my.id/hospitals?type=RS Jiwa&province=32" \
  -H "Authorization: Bearer $API_KEY"
🌐

Kurs, Geo & IP

Langganan

Kurs mata uang real-time, reverse geocoding, dan IP geolocation.

GET /rates πŸ”‘ Butuh API key Coba β†’

Kurs 160+ mata uang, dengan konversi opsional.

PARAMETER QUERY
base string opsional Kode 3 huruf. Default USD.
to string opsional Filter mata uang, pisahkan koma.
amount number opsional Konversi jumlah (butuh satu ?to).
CURL
curl "https://v1.api.my.id/rates?base=USD&to=IDR&amount=100" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success", "code": 200, "count": 1,
  "data": {
    "base": "USD",
    "updated_at": "Thu, 09 Jul 2026 00:02:32 +0000",
    "rates": { "IDR": 18058.21 },
    "converted": 1805821.08
  }
}
GET /geocode/reverse πŸ”‘ Butuh API key Coba β†’

Koordinat β†’ kota terdekat (akurasi tingkat kota).

PARAMETER QUERY
lat number wajib Latitude (wilayah Indonesia).
lng number wajib Longitude.
CURL
curl "https://v1.api.my.id/geocode/reverse?lat=-6.95&lng=107.60" \
  -H "Authorization: Bearer $API_KEY"
GET /ip/{ip} πŸ”‘ Butuh API key Coba β†’

Lokasi dari alamat IP. Gunakan /ip/me untuk IP pemanggil.

CURL
curl "https://v1.api.my.id/ip/8.8.8.8" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success", "code": 200,
  "data": {
    "ip": "8.8.8.8", "country": "United States", "city": "Mountain View",
    "lat": 37.386, "lng": -122.084, "timezone": "America/Los_Angeles",
    "asn": 15169, "isp": "Google LLC"
  }
}
πŸ“¦

Cek Ongkos Kirim

Langganan

Tarif kurir untuk rute mana pun di Indonesia. Anda memakai kode wilayah yang sama dengan API Wilayah β€” tidak perlu belajar ID internal provider. Berat dibulatkan ke atas per kilogram, persis seperti cara kurir menagih.

POST /shipping/cost πŸ”‘ Butuh API key Coba β†’

Tarif semua layanan kurir untuk satu rute.

PARAMETER QUERY
origin string wajib Kode kecamatan asal (7 digit) β€” dari GET /wilayah/districts.
destination string wajib Kode kecamatan tujuan.
weight int wajib Berat dalam gram. Dibulatkan ke atas per kg.
courier string opsional Kode kurir, boleh dipisah koma. Default: jne,jnt,sicepat.
BODY REQUEST
{ "origin": "3173020", "destination": "5103020", "weight": 1240, "courier": "jne,jnt" }
CURL
curl -X POST "https://v1.api.my.id/shipping/cost" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "origin": "3173020", "destination": "5103020", "weight": 1240, "courier": "jne,jnt" }'
CONTOH RESPONS
{
  "status": "success",
  "code": 200,
  "origin": { "code": "3173020", "name": "Menteng" },
  "destination": { "code": "5103020", "name": "Kuta" },
  "weight_grams": 1240,
  "billed_weight": { "kg": 2, "note": "couriers bill per started kilogram, so the weight is rounded up" },
  "data": [
    { "courier": "jne", "service": "REG", "description": "Reguler", "cost": 19000, "etd": "2 day" },
    { "courier": "jne", "service": "YES", "description": "Express", "cost": 38000, "etd": "1 day" }
  ]
}
GET /shipping/couriers πŸ”‘ Butuh API key Coba β†’

Daftar kode kurir yang didukung.

CURL
curl "https://v1.api.my.id/shipping/couriers" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{ "status": "success", "code": 200, "count": 9, "data": ["jne","pos","tiki","sicepat","jnt","ninja","anteraja","wahana","lion"] }
πŸ€–

AI: OCR, CV & Artikel

Pay Per Use

Endpoint bertenaga AI. Dibayar dengan poin per hit sukses β€” poin hanya terpotong bila berhasil, dan dikembalikan otomatis jika upstream gagal.

POST /ocr/ktp πŸ”‘ Butuh API key 150 poin/hit Coba β†’

Ekstrak data KTP menjadi JSON terstruktur.

BODY REQUEST
// multipart: field "image"  β€”  atau JSON:
{ "image": "<base64>", "media_type": "image/jpeg" }
CURL
curl -X POST "https://v1.api.my.id/ocr/ktp" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success", "code": 200,
  "model": "claude-opus-4-8", "document": "ktp", "points_charged": 150,
  "data": {
    "nik": "3204xxxxxxxxxxxx", "nama": "BUDI SANTOSO",
    "tempat_lahir": "BANDUNG", "tanggal_lahir": "17-08-1990",
    "jenis_kelamin": "LAKI-LAKI", "alamat": "JL. MERDEKA NO. 1",
    "kecamatan": "COBLONG", "agama": "ISLAM",
    "confidence": "high"
  }
}
POST /ocr/sim πŸ”‘ Butuh API key 300 poin/hit Coba β†’

Ekstrak data SIM (format baru & 6 baris).

BODY REQUEST
// multipart: field "image"  β€”  atau JSON base64
CURL
curl -X POST "https://v1.api.my.id/ocr/sim" \
  -H "Authorization: Bearer $API_KEY"
POST /cv/extract πŸ”‘ Butuh API key 300 poin/hit Coba β†’

Parse CV (PDF/gambar/teks) menjadi JSON terstruktur.

BODY REQUEST
// multipart: field "file" (PDF atau gambar)
// atau JSON: { "text": "<isi CV>" }
CURL
curl -X POST "https://v1.api.my.id/cv/extract" \
  -H "Authorization: Bearer $API_KEY"
CONTOH RESPONS
{
  "status": "success", "code": 200, "points_charged": 300,
  "data": {
    "name": "Siti Rahma", "email": "siti@example.com", "phone": "+62812…",
    "skills": ["Go", "PostgreSQL", "Docker"],
    "experience": [ { "company": "PT Maju", "title": "Backend Engineer", "start": "2022", "end": "2026", "description": "…" } ],
    "education": [ { "institution": "Institut Teknologi Bandung", "degree": "S1 Informatika", "year": "2021" } ],
    "certifications": [], "languages": ["Indonesia", "English"]
  }
}
POST /articles/generate πŸ”‘ Butuh API key 1300 poin/hit Coba β†’

Generate artikel SEO-friendly dalam Markdown.

BODY REQUEST
{
  "topic": "Cara integrasi API cek ongkir",
  "language": "id",             // id | en
  "tone": "informatif",         // opsional
  "keywords": ["ongkir", "api"],// opsional, maks 10
  "words": 800                  // opsional, 300–2000
}
CURL
curl -X POST "https://v1.api.my.id/articles/generate" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "topic": "Cara integrasi API cek ongkir", "language": "id",             ,         , "api"],, maks 10 "words": 800                  , 300–2000 }'
CONTOH RESPONS
{
  "status": "success", "code": 200, "points_charged": 1300,
  "data": {
    "article_markdown": "# Cara Integrasi API Cek Ongkir\n\n## Pendahuluan\n…",
    "meta_description": "Panduan lengkap integrasi API cek ongkir…",
    "word_count": 812
  }
}
POST /image/remove-bg πŸ”‘ Butuh API key 300 poin/hit Coba β†’

Hapus background gambar β†’ PNG transparan.

PARAMETER QUERY
model string opsional u2net (default), u2netp, silueta, isnet-general-use.
format string opsional binary β†’ PNG langsung. Default JSON base64.
BODY REQUEST
// multipart: field "image" (maks 10 MB)
CURL
curl -X POST "https://v1.api.my.id/image/remove-bg?model=u2net&format=binary" \
  -H "Authorization: Bearer $API_KEY"
πŸ’³

Pembayaran & Poin

Langganan

Top up poin dan beli langganan lewat Midtrans. 1 IDR = 1 poin. Poin dipakai untuk endpoint AI di atas.

GET /billing/config βœ“ Tanpa API key Coba β†’

Status gateway pembayaran (dipakai frontend).

CURL
curl "https://v1.api.my.id/billing/config"
POST /billing/topup πŸ”‘ Butuh API key Coba β†’

Buat transaksi top-up poin. Kembalikan snap_token untuk popup pembayaran.

BODY REQUEST
{ "amount": 100000 }   // IDR, 10.000 – 10.000.000
CURL
curl -X POST "https://v1.api.my.id/billing/topup" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "amount": 100000 }   , 10.000 – 10.000.000'
CONTOH RESPONS
{
  "status": "success", "code": 200,
  "data": {
    "order_id": "TOPUP-12-1752…",
    "snap_token": "66e4fa55-fdac-4ef9-91b5-…",
    "redirect_url": "https://app.sandbox.midtrans.com/snap/v2/vtweb/…",
    "amount": 100000, "points": 100000
  }
}
POST /billing/subscribe πŸ”‘ Butuh API key Coba β†’

Beli langganan produk (30 hari).

BODY REQUEST
{ "product_id": "wilayah-indonesia", "tier": "Pro" }
CURL
curl -X POST "https://v1.api.my.id/billing/subscribe" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "product_id": "wilayah-indonesia", "tier": "Pro" }'
GET /billing/orders πŸ”‘ Butuh API key Coba β†’

Riwayat order Anda.

CURL
curl "https://v1.api.my.id/billing/orders" \
  -H "Authorization: Bearer $API_KEY"