Langsung ke konten utama
Gunakan Landing Pages API saat backend Anda perlu membuat, melihat, memperbarui, menerbitkan, atau menghapus landing page Scalev. Endpoint ini adalah endpoint bisnis terautentikasi. Jangan panggil endpoint ini dari JavaScript browser karena membutuhkan API key bisnis atau OAuth access token. Endpoint ini dapat mengembalikan halaman Builder dan HTML Mode. Panduan ini mendokumentasikan payload HTML Mode karena itu payload yang direkomendasikan untuk membuat kode halaman langsung lewat API. Payload request Builder sengaja tidak didokumentasikan dan akan tetap seperti itu.

Auth

Kirim API key bisnis atau OAuth access token di header Authorization:
curl https://api.scalev.com/v3/pages \
  -H "Authorization: Bearer $SCALEV_API_KEY"
Scope yang dibutuhkan:
AksiScope
List page dan displaypage:list
Baca satu page atau displaypage:read
Buat pagepage:create
Update metadata, status publish, tag, dan displaypage:update
Hapus pagepage:delete
List storestore:list
List payment method, sales person, dan product knowledgestore:read
List produk store dan variantproduct:list, product:read
List bundle store dan bundle price optionbundle:list, bundle:read
List payment accountpayment_account:list
Kelola pixel analytics dan container GTMfb_pixel:*, tiktok_pixel:*, kwai_pixel:*, gtm:*

Endpoint

GET    /v3/pages
POST   /v3/pages
GET    /v3/pages/simplified
GET    /v3/pages/tags
GET    /v3/pages/{page_id}
PATCH  /v3/pages/{page_id}
DELETE /v3/pages/{page_id}
GET    /v3/pages/{page_id}/public
POST   /v3/pages/{page_id}/update-tags

GET    /v3/pages/{page_id}/page-displays
POST   /v3/pages/{page_id}/page-displays
GET    /v3/pages/{page_id}/page-displays/{display_id}
DELETE /v3/pages/{page_id}/page-displays/{display_id}

GET    /v3/stores/simplified
GET    /v3/stores/{store_id}/products
GET    /v3/stores/{store_id}/variants/{variant_id}
GET    /v3/stores/{store_id}/bundles
GET    /v3/stores/{store_id}/bundles/{bundle_id}
GET    /v3/stores/{store_id}/bundle-price-options/{id}
GET    /v3/stores/{store_id}/sales-people
GET    /v3/stores/{store_id}/payment-methods
GET    /v3/stores/{store_id}/payment-accounts
GET    /v3/stores/{store_id}/pages

GET    /v3/fb-standard-events
GET    /v3/tiktok-standard-events
GET    /v3/kwai-standard-events
GET    /v3/fb-pixels
POST   /v3/fb-pixels
GET    /v3/fb-pixels/{id}
PATCH  /v3/fb-pixels/{id}
DELETE /v3/fb-pixels/{id}
GET    /v3/tiktok-pixels
POST   /v3/tiktok-pixels
GET    /v3/tiktok-pixels/{id}
PATCH  /v3/tiktok-pixels/{id}
DELETE /v3/tiktok-pixels/{id}
GET    /v3/kwai-pixels
POST   /v3/kwai-pixels
GET    /v3/kwai-pixels/{id}
PATCH  /v3/kwai-pixels/{id}
DELETE /v3/kwai-pixels/{id}
GET    /v3/gtm
POST   /v3/gtm
GET    /v3/gtm/{id}
PATCH  /v3/gtm/{id}
DELETE /v3/gtm/{id}
Endpoint list memakai cursor pagination. Jika has_next bernilai true, kirim next_cursor pada request berikutnya. Jika has_previous bernilai true, kirim previous_cursor untuk mundur ke halaman sebelumnya.

Alur setup lengkap

  1. List store dengan GET /v3/stores/simplified. Gunakan id store numerik sebagai {store_id} untuk endpoint setup business-scoped yang terautentikasi.
  2. List item yang dijual di store dengan GET /v3/stores/{store_id}/products dan GET /v3/stores/{store_id}/bundles. Gunakan variants[].id produk untuk form_display.variant_ids, atau bundle_price_options[].id bundle untuk form_display.bundle_price_option_ids.
  3. Ambil detail satu item jika perlu dengan GET /v3/stores/{store_id}/variants/{variant_id} atau GET /v3/stores/{store_id}/bundle-price-options/{id}.
  4. List record analytics yang sudah ada dengan GET /v3/fb-pixels, GET /v3/tiktok-pixels, GET /v3/kwai-pixels, dan GET /v3/gtm. Buat record yang belum ada dengan endpoint POST yang sesuai.
  5. List nama event yang valid dengan GET /v3/fb-standard-events, GET /v3/tiktok-standard-events, dan GET /v3/kwai-standard-events?type=client|server.
  6. Jika after_submit_event adalah direct_to_whatsapp dengan assignment fixed, list handler dengan GET /v3/stores/{store_id}/sales-people lalu kirim id yang dipilih sebagai store_sales_person_id.
  7. Buat atau update page display. Kirim ID record Scalev di *_pixel_ids, gtm_id, variant_ids, bundle_price_option_ids, dan store_sales_person_id.
  8. Publish saat membuat page dengan is_published: true, atau patch current_page_display_id lewat PATCH /v3/pages/{page_id}.
Setup custom domain dan manajemen assignment business user tidak termasuk release public v3 Landing Pages ini.

Payload display HTML Mode

HTML Mode memakai render_mode: "html_mode" dan field kode berikut:
  • html_code: HTML body-only
  • css_code: CSS
  • js_code: JavaScript browser
  • additional_head_code: kode tambahan untuk dokumen <head>
  • csp_policy: tambahan Content Security Policy opsional
Saat js_code dikirim sebagai string kosong, response API dapat mengembalikannya sebagai null. Perlakukan null dan "" sebagai “tanpa JavaScript” ketika membaca page display. css_code dan additional_head_code tetap dapat kembali sebagai string kosong. Gunakan additional_head_code saat kamu perlu menambahkan tag head yang didukung secara langsung: title, meta, link, style, script, dan noscript. Scalev juga membuat tag head terkelola dari convenience setting seperti meta.title, meta.description, meta.thumbnail, meta.favicon, dan meta.isDisabledSearchEngineCrawler. Jika additional_head_code berisi title, meta, atau favicon link yang konflik, entry dari additional head akan menang. meta.lang tetap menjadi sumber untuk <html lang="...">; value ini tidak diambil dari additional_head_code. Jangan kirim field display khusus Builder seperti schema_version, banner, header, general, sidebar, atau main untuk HTML Mode. Scalev mengisi default yang sesuai secara internal. Response tetap bisa berisi field tersebut. Sertakan field event analytics walaupun nilainya kosong:
{
  "render_mode": "html_mode",
  "html_code": "<main><h1>Launch offer</h1></main>",
  "css_code": "main { padding: 32px; }",
  "js_code": "",
  "additional_head_code": "<meta name=\"theme-color\" content=\"#09AFED\">",
  "csp_policy": {},
  "meta": {
    "lang": "id",
    "title": "Launch offer",
    "description": "Deskripsi singkat penawaran",
    "favicon": "https://cdn.example.com/favicon.ico",
    "thumbnail": "https://cdn.example.com/social-image.jpg",
    "isDisabledSearchEngineCrawler": false
  },
  "fb_pixel_ids": [],
  "tiktok_pixel_ids": [],
  "kwai_client_pixel_ids": [],
  "kwai_server_pixel_ids": [],
  "gtm_id": null,
  "onload_fb_events": [],
  "onload_tiktok_events": [],
  "onload_kwai_client_events": [],
  "onload_kwai_server_events": [],
  "fb_events_onload_parameters": {},
  "tiktok_events_onload_parameters": {},
  "kwai_client_events_onload_parameters": {},
  "kwai_server_events_onload_parameters": {}
}
html_code tidak boleh berisi <!doctype>, <html>, <head>, <body>, metadata, tag favicon, atau pengaturan domain. Taruh tag head yang didukung di additional_head_code, dan simpan convenience setting level dokumen di meta. Gunakan runtime HTML Mode untuk checkout, analytics, prefill, dan konteks halaman.

Pixel analytics dan event

Pasang pixel analytics yang sudah ada ke page display dengan mengirim ID record pixel Scalev di payload display. Ini adalah ID record numerik dari GET /v3/fb-pixels, GET /v3/tiktok-pixels, dan GET /v3/kwai-pixels, bukan kode pixel dari provider seperti Meta Pixel ID.
FieldMakna
fb_pixel_idsID record pixel Meta/Facebook dari pengaturan analytics Scalev
tiktok_pixel_idsID record pixel TikTok dari pengaturan analytics Scalev
kwai_client_pixel_idsID record pixel browser SnackVideo
kwai_server_pixel_idsID record pixel SnackVideo Events API
Gunakan POST /v3/fb-pixels, POST /v3/tiktok-pixels, POST /v3/kwai-pixels, dan POST /v3/gtm jika bisnis belum punya record tersebut. Gunakan GET /v3/gtm untuk mencari gtm_id yang dikirim di payload display. Hanya pixel milik bisnis yang sama yang akan dipasang. ID dari bisnis lain atau record pixel yang tidak ditemukan tidak akan dipasang dan tidak akan muncul di response. Kirim array kosong jika display baru tidak perlu memakai pixel untuk provider tersebut. Konfigurasi event otomatis saat halaman dibuka ada di page display yang sama:
{
  "fb_pixel_ids": [101],
  "tiktok_pixel_ids": [202],
  "kwai_client_pixel_ids": [303],
  "kwai_server_pixel_ids": [404],
  "gtm_id": 505,
  "onload_fb_events": ["PageView", "ViewContent"],
  "onload_tiktok_events": ["ViewContent"],
  "onload_kwai_client_events": ["contentView"],
  "onload_kwai_server_events": ["EVENT_CONTENT_VIEW"],
  "fb_events_onload_parameters": {
    "ViewContent": { "content_name": "Launch offer" }
  },
  "tiktok_events_onload_parameters": {},
  "kwai_client_events_onload_parameters": {},
  "kwai_server_events_onload_parameters": {}
}
Untuk HTML Checkout, event submit checkout dikonfigurasi di dalam page_display.form_display, bukan di level page display utama:
{
  "form_display": {
    "store_id": 123,
    "variant_ids": [456],
    "bundle_price_option_ids": [],
    "after_submit_event": "success_page",
    "onsubmit_fb_events": ["InitiateCheckout"],
    "onsubmit_tiktok_events": ["InitiateCheckout"],
    "onsubmit_kwai_client_events": ["formSubmit"],
    "onsubmit_kwai_server_events": ["EVENT_FORM_SUBMIT"],
    "fb_events_onsubmit_parameters": {},
    "tiktok_events_onsubmit_parameters": {},
    "kwai_client_events_onsubmit_parameters": {},
    "kwai_server_events_onsubmit_parameters": {}
  }
}
Response read mengembalikan object pixel lengkap di fb_pixels, tiktok_pixels, kwai_client_pixels, dan kwai_server_pixels, bukan array ID. Jika membuat display lain dari response read, gunakan nilai id dari tiap object pixel ke field request *_pixel_ids yang sesuai.

Membuat HTML Sales page

Jangan kirim form_display untuk landing page HTML biasa tanpa checkout.
curl -X POST https://api.scalev.com/v3/pages \
  -H "Authorization: Bearer $SCALEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "API HTML Sales Page",
    "slug": "api-html-sales-page",
    "is_published": true,
    "page_display": {
      "render_mode": "html_mode",
      "html_code": "<main><h1>Launch offer</h1></main>",
      "css_code": "main { padding: 32px; }",
      "js_code": "",
      "csp_policy": {},
      "meta": { "lang": "id" },
      "fb_pixel_ids": [],
      "tiktok_pixel_ids": [],
      "kwai_client_pixel_ids": [],
      "kwai_server_pixel_ids": [],
      "gtm_id": null,
      "onload_fb_events": [],
      "onload_tiktok_events": [],
      "onload_kwai_client_events": [],
      "onload_kwai_server_events": [],
      "fb_events_onload_parameters": {},
      "tiktok_events_onload_parameters": {},
      "kwai_client_events_onload_parameters": {},
      "kwai_server_events_onload_parameters": {}
    }
  }'
Response mengembalikan object page langsung, bukan di dalam envelope lama data.

Membuat HTML Checkout page

Tambahkan page_display.form_display jika halaman akan membuat order. Checkout page membutuhkan:
  • store_id
  • minimal satu item di variant_ids atau satu item di bundle_price_option_ids
Setelah page memiliki store_id tersimpan, setiap display baru untuk page tersebut harus memakai checkout store yang sama. Display dengan form_display.store_id berbeda, atau display tanpa konteks store, akan ditolak.
{
  "name": "API HTML Checkout Page",
  "slug": "api-html-checkout-page",
  "is_published": true,
  "page_display": {
    "render_mode": "html_mode",
    "html_code": "<main><h1>Checkout offer</h1><button id=\"buy\">Buy now</button></main>",
    "css_code": "",
    "js_code": "",
    "csp_policy": {},
    "meta": { "lang": "id" },
    "fb_pixel_ids": [101],
    "tiktok_pixel_ids": [202],
    "kwai_client_pixel_ids": [303],
    "kwai_server_pixel_ids": [404],
    "gtm_id": 505,
    "onload_fb_events": [],
    "onload_tiktok_events": [],
    "onload_kwai_client_events": [],
    "onload_kwai_server_events": [],
    "fb_events_onload_parameters": {},
    "tiktok_events_onload_parameters": {},
    "kwai_client_events_onload_parameters": {},
    "kwai_server_events_onload_parameters": {},
    "form_display": {
      "store_id": 123,
      "variant_ids": [456],
      "bundle_price_option_ids": [],
      "after_submit_event": "success_page",
      "onsubmit_fb_events": ["InitiateCheckout"],
      "onsubmit_tiktok_events": ["InitiateCheckout"],
      "onsubmit_kwai_client_events": ["formSubmit"],
      "onsubmit_kwai_server_events": ["EVENT_FORM_SUBMIT"],
      "fb_events_onsubmit_parameters": {},
      "tiktok_events_onsubmit_parameters": {},
      "kwai_client_events_onsubmit_parameters": {},
      "kwai_server_events_onsubmit_parameters": {}
    }
  }
}
Untuk perilaku setelah order berhasil dibuat, gunakan nilai after_submit_event berikut:
ValueField wajib
success_pageTidak ada
direct_to_whatsapphandler_assignment; jika handler_assignment bernilai fixed, kirim juga store_sales_person_id
direct_to_custom_whatsappcustom_phone
other_pageother_page_id
custom_urlcustom_url
is_sending_email_invoiceTidak ada
order_pageTidak ada
Baca aksi setelah checkout HTML Mode untuk perilaku runtime setiap path.

Update page

PATCH /v3/pages/{page_id} memperbarui metadata page dan status publish.
{
  "name": "Updated page name",
  "slug": "updated-page-slug"
}
Untuk menerbitkan display tertentu:
{
  "is_published": true,
  "current_page_display_id": 987
}
Untuk unpublish:
{
  "is_published": false,
  "current_page_display_id": null
}

Membuat dan menerbitkan display baru

Untuk mengubah HTML, CSS, JavaScript, pixel, atau konteks checkout, buat page display baru: Jika page sudah memiliki store tersimpan, display baru harus menyertakan form_display.store_id yang sama; menghilangkan konteks store akan ditolak.
curl -X POST https://api.scalev.com/v3/pages/123/page-displays \
  -H "Authorization: Bearer $SCALEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "render_mode": "html_mode",
    "html_code": "<main><h1>New version</h1></main>",
    "css_code": "",
    "js_code": "",
    "csp_policy": {},
    "meta": { "lang": "id" },
    "fb_pixel_ids": [],
    "tiktok_pixel_ids": [],
    "kwai_client_pixel_ids": [],
    "kwai_server_pixel_ids": [],
    "gtm_id": null,
    "onload_fb_events": [],
    "onload_tiktok_events": [],
    "onload_kwai_client_events": [],
    "onload_kwai_server_events": [],
    "fb_events_onload_parameters": {},
    "tiktok_events_onload_parameters": {},
    "kwai_client_events_onload_parameters": {},
    "kwai_server_events_onload_parameters": {}
  }'
Response berisi id display baru. Terbitkan dengan:
curl -X PATCH https://api.scalev.com/v3/pages/123 \
  -H "Authorization: Bearer $SCALEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "is_published": true,
    "current_page_display_id": 987
  }'

Tag dan delete

Ganti semua tag dengan:
{
  "tags": ["Promo", "Checkout"]
}
Panggil:
POST /v3/pages/{page_id}/update-tags
Hapus page dengan:
DELETE /v3/pages/{page_id}
Response delete yang berhasil mengembalikan 204 No Content.