Autentikasi — ganti YOUR_TOKEN dengan admin API key (tm_admin_...).

?token=YOUR_TOKEN
GET

Buat user baru

/api/v1/admin/keys/create

Membuat account (jika username belum ada) dan menerbitkan API key. Nilai penuh key hanya muncul sekali di response ini.

Parameter
NamaDiWajibKeterangan
tokenquerywajibAdmin API key
usernamequerywajibIdentitas account. Otomatis lowercase
expires_in_daysqueryopsionalDefault 30, maks 3650
expires_atqueryopsionalYYYY-MM-DD atau RFC3339. Mengalahkan expires_in_days
labelqueryopsionalCatatan bebas, misalnya nama project
rolequeryopsionalDefault user. Bisa admin
Contoh request
https://mail.tgx-app.com/api/v1/admin/keys/create?token=YOUR_TOKEN&username=clientA&label=integrasi+bot&expires_in_days=30

YYYY-MM-DD artinya sampai akhir hari itu (23:59:59 UTC).

Contoh response
{
  "success": true,
  "data": {
    "api_key": "tm_live_3079fd96456c8e42eb94c210f74f7a303d4dff632493133f",
    "id": 2,
    "account_id": 2,
    "username": "clienta",
    "label": "integrasi bot",
    "prefix": "tm_live_3079...133f",
    "role": "user",
    "expires_at": "2026-09-12T17:05:09Z",
    "created_at": "2026-08-14T01:05:09+08:00",
    "warning": "Simpan api_key ini sekarang. Nilai penuhnya tidak bisa dilihat lagi setelah response ini."
  }
}

Simpan api_key sekarang. Field ini tidak bisa dilihat lagi setelah response ini.

GET

Cek langganan

/api/v1/admin/keys/list

Menampilkan daftar API key beserta prefix, masa aktif, dan status.

Parameter
NamaDiWajibKeterangan
tokenquerywajibAdmin API key
pagequeryopsionalDefault 1
limitqueryopsionalDefault 20, maks 200
account_idqueryopsionalFilter berdasarkan id account
usernamequeryopsionalFilter berdasarkan username
Contoh request
https://mail.tgx-app.com/api/v1/admin/keys/list?token=YOUR_TOKEN&username=clientA
Contoh response
{
  "success": true,
  "data": {
    "api_keys": [
      {
        "id": 4,
        "account_id": 4,
        "username": "clienta",
        "label": "integrasi bot",
        "prefix": "tm_live_822e...ed7a",
        "role": "user",
        "expires_at": "2026-09-13T01:05:24+08:00",
        "revoked_at": null,
        "last_used_at": "2026-08-14T01:05:24+08:00",
        "created_at": "2026-08-14T01:05:24+08:00"
      }
    ],
    "page": 1,
    "limit": 20,
    "total": 1
  }
}

prefix dipakai untuk mencocokkan key client tanpa menampilkan nilai penuhnya.

GET

Detail langganan

/api/v1/admin/keys/detail/:id

Menampilkan satu API key berdasarkan id.

Parameter
NamaDiWajibKeterangan
idpathwajibId API key
tokenquerywajibAdmin API key
Contoh request
https://mail.tgx-app.com/api/v1/admin/keys/detail/4?token=YOUR_TOKEN
Contoh response
{
  "success": true,
  "data": {
    "id": 4,
    "account_id": 4,
    "label": "integrasi bot",
    "prefix": "tm_live_822e...ed7a",
    "role": "user",
    "expires_at": "2026-09-13T01:05:24+08:00",
    "revoked_at": null,
    "last_used_at": "2026-08-14T01:05:24+08:00",
    "created_at": "2026-08-14T01:05:24+08:00"
  }
}
GET

Perpanjang langganan

/api/v1/admin/keys/:id/extend

Memperpanjang masa aktif. Key yang sudah expired hidup lagi dengan nilai yang sama. Key yang sudah di-revoke tidak bisa diperpanjang.

Parameter
NamaDiWajibKeterangan
idpathwajibId API key
tokenquerywajibAdmin API key
expires_in_daysqueryopsionalDefault 30. Ditambahkan ke masa aktif
expires_atqueryopsionalTanggal pasti. Mengalahkan expires_in_days
Contoh request
https://mail.tgx-app.com/api/v1/admin/keys/4/extend?token=YOUR_TOKEN&expires_in_days=90

Key yang masih aktif dihitung dari expires_at lama, jadi sisa hari tidak hangus.

Contoh response
{
  "success": true,
  "data": {
    "id": 4,
    "account_id": 4,
    "label": "integrasi bot",
    "prefix": "tm_live_822e...ed7a",
    "role": "user",
    "expires_at": "2026-12-11T17:05:24Z",
    "revoked_at": null
  }
}
GET

Batalkan langganan

/api/v1/admin/keys/:id/revoke

Mencabut API key secara permanen. Request berikutnya dengan key itu mendapat 401 api_key_revoked.

Parameter
NamaDiWajibKeterangan
idpathwajibId API key
tokenquerywajibAdmin API key
Contoh request
https://mail.tgx-app.com/api/v1/admin/keys/5/revoke?token=YOUR_TOKEN

Revoke tidak bisa dibatalkan — terbitkan key baru.

Contoh response
{
  "success": true,
  "data": {
    "id": 5,
    "account_id": 4,
    "prefix": "tm_live_822e...ed7a",
    "role": "user",
    "revoked_at": "2026-08-22T04:20:00Z"
  }
}
GET

Daftar semua user

/api/v1/admin/accounts/list

Menampilkan semua account yang sudah dibuat, beserta status langganan (active / inactive).

Parameter
NamaDiWajibKeterangan
tokenquerywajibAdmin API key
pagequeryopsionalDefault 1
limitqueryopsionalDefault 20
Contoh request
https://mail.tgx-app.com/api/v1/admin/accounts/list?token=YOUR_TOKEN&page=1&limit=20
Contoh response
{
  "success": true,
  "data": {
    "accounts": [
      {
        "id": 4,
        "username": "clienta",
        "role": "user",
        "status": "active",
        "created_at": "2026-08-14T01:05:09+08:00",
        "updated_at": "2026-08-14T01:05:09+08:00"
      },
      {
        "id": 3,
        "username": "clientb",
        "role": "user",
        "status": "inactive",
        "created_at": "2026-08-13T10:00:00+08:00",
        "updated_at": "2026-08-13T10:00:00+08:00"
      }
    ],
    "page": 1,
    "limit": 20,
    "total": 2
  }
}

status = active jika user punya minimal satu API key yang belum expired dan belum di-revoke. Batalkan langganan / masa aktif habis → inactive. User tetap muncul di daftar ini.

GET

Daftar domain

/api/v1/admin/domains/list

Menampilkan domain yang dikelola untuk membuat mailbox.

Parameter
NamaDiWajibKeterangan
tokenquerywajibAdmin API key
Contoh request
https://mail.tgx-app.com/api/v1/admin/domains/list?token=YOUR_TOKEN
Contoh response
{
  "success": true,
  "data": {
    "domains": [
      { "id": 2, "domain": "mail.tgx-app.com", "is_active": true }
    ]
  }
}
GET

Tambah domain

/api/v1/admin/domains/add

Mendaftarkan atau mengubah domain. Kirim ulang domain yang sama untuk mengubah statusnya. MX record harus mengarah ke server ini supaya email masuk.

Parameter
NamaDiWajibKeterangan
tokenquerywajibAdmin API key
domainquerywajibContoh mail.tgx-app.com
is_activequeryopsionalDefault true. false = tidak dipakai untuk mailbox baru
Contoh request
https://mail.tgx-app.com/api/v1/admin/domains/add?token=YOUR_TOKEN&domain=mail.tgx-app.com&is_active=true
Contoh response
{
  "success": true,
  "data": {
    "id": 2,
    "domain": "mail.tgx-app.com",
    "is_active": true
  }
}
GET

Hapus domain

/api/v1/admin/domains/delete

Menghapus domain dari pool. Mailbox lama tetap bisa menerima email; domain hanya berhenti dipakai untuk generate baru.

Parameter
NamaDiWajibKeterangan
domainquerywajibDomain yang akan dihapus
tokenquerywajibAdmin API key
Contoh request
https://mail.tgx-app.com/api/v1/admin/domains/delete?token=YOUR_TOKEN&domain=mail.tgx-app.com
Contoh response
{
  "success": true,
  "data": {
    "domain": "mail.tgx-app.com",
    "deleted": true
  }
}
GET

Statistik

/api/v1/admin/stats

Ringkasan jumlah account, mailbox, email, domain, dan API key. Endpoint ini publik — tidak perlu token.

Parameter
NamaDiWajibKeterangan
Tidak ada. Endpoint ini tidak memakai autentikasi.
Contoh request
https://mail.tgx-app.com/api/v1/admin/stats
Contoh response
{
  "success": true,
  "data": {
    "total_accounts": 5,
    "total_mailboxes": 12,
    "total_emails": 47,
    "total_managed_domains": 2,
    "active_api_keys": 4,
    "expired_api_keys": 1,
    "revoked_api_keys": 0
  }
}

expired_api_keys adalah sinyal key yang perlu diperpanjang.