Quickstart

Pilih platform, salin snippet, jalankan. Polanya selalu sama: daftarkan app → hubungkan akun → posting. Referensi lengkap semua endpoint ada di Swagger.

Sebelum mulai: API key

Semua request memakai API key sk_…. Key dibuat oleh pengelola server medsos-share dan hanya ditampilkan satu kali:

docker compose exec api node dist/cli/create-tenant.js --name "Nama Usaha Anda"

Tanpa akses terminal (misalnya di Dokploy): isi env ADMIN_TOKEN di server, lalu buat lewat API:

curl -X POST "https://socialshare.managebiz.co/admin/tenants" \
  -H "Authorization: Bearer ADMIN_TOKEN_ANDA" \
  -H "Content-Type: application/json" \
  -d '{"name": "Nama Usaha Anda"}'

Key hilang/bocor? POST /admin/tenants/{id}/rotate-key memberi key baru dan mematikan yang lama. Saat development tanpa Docker: npm run tenant:create -- --name "Nama Usaha Anda". Untuk melayani banyak klien, buat profile per klien dengan POST /api/profiles lalu pakai profileKey-nya sebagai Profile-Key.

Isi API key Anda supaya semua snippet langsung siap dipakai. Nilai ini hanya dipakai di halaman ini: tidak disimpan dan tidak dikirim ke mana pun. Isi Profile-Key kalau bertindak atas nama klien tertentu (dari POST /api/profiles).

Bahasa:

Facebook Page

Posting teks, link, foto (hingga 10), atau video ke Facebook Page.

Yang perlu disiapkan
  • Akun klien harus admin Facebook Page.
  • Sebelum App Review + Business Verification, hanya akun yang punya peran di app Anda yang bisa dihubungkan.
  1. 1

    Siapkan developer app Meta (Facebook Pages & Instagram) (sekali saja)

    1. developers.facebook.com → Aplikasi Saya → Buat aplikasi. Isi nama aplikasi dan email.
    2. Kasus penggunaan: klik filter "Pengelolaan konten", lalu centang "Kelola segala sesuatu di Halaman Anda" (Manage everything on your Page). Jangan pilih Facebook Login atau Marketing API.
    3. Bisnis: untuk uji coba pilih belum menghubungkan portofolio bisnis, lalu lanjut sampai "Buat aplikasi".
    4. Dasbor → "Sesuaikan kasus penggunaan Kelola semua hal di Halaman Anda": pastikan semua izin di bawah berstatus "Ditambahkan".
    5. Pengaturan aplikasi → Dasar: salin ID Aplikasi dan Kunci Rahasia Aplikasi. Untuk uji coba biarkan app di mode Development (jangan "Terbitkan").

    Izin (scope) yang dibutuhkan: pages_show_list pages_manage_posts pages_read_engagement

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/facebook

    Mode Development: Meta langsung menerima Redirect URI localhost, tidak perlu didaftarkan. Produksi (https): daftarkan di Facebook Login for Business → Pengaturan → "URI Pengalihan OAuth yang Valid".

    Satu app Meta (Facebook Pages & Instagram) dipakai untuk beberapa platform. Kalau App ID-nya sudah pernah disimpan, langkah PUT di bawah tidak perlu diulang.

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/meta" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/meta", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/meta");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/meta",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/facebook/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/facebook/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/facebook/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/facebook/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())
    • Tanpa "redirect", klien melihat halaman "Connected" dan boleh menutup jendela.
    • Kalau klien mengelola beberapa Page, muncul halaman untuk memilih satu Page.
    • Token Page yang didapat tidak kedaluwarsa, jadi klien tidak perlu login ulang.

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Buka Graph API Explorer (developers.facebook.com/tools/explorer) dan pilih app Anda di "Meta App".
    2. Tambahkan izin pages_show_list, pages_manage_posts, pages_read_engagement → "Generate Access Token" → login dan pilih Page.
    3. Jalankan GET me/accounts: ambil "id" sebagai pageId dan "access_token" sebagai pageAccessToken.
    4. Token dari Explorer hanya berlaku 1–2 jam. Supaya tidak kedaluwarsa: Access Token Debugger → "Extend Access Token", lalu jalankan me/accounts lagi dengan token panjang itu.
    curl -X POST "https://socialshare.managebiz.co/api/accounts/facebook" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "pageId": "PAGE_ID",
        "pageAccessToken": "PAGE_ACCESS_TOKEN"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/facebook", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "pageId": "PAGE_ID",
        "pageAccessToken": "PAGE_ACCESS_TOKEN"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/facebook");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "pageId": "PAGE_ID",
      "pageAccessToken": "PAGE_ACCESS_TOKEN"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/facebook",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "pageId": "PAGE_ID",
            "pageAccessToken": "PAGE_ACCESS_TOKEN",
        },
    )
    print(res.json())
  3. 3

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Promo akhir pekan! 🎉",
        "platforms": [
          "facebook"
        ],
        "mediaUrls": [
          "https://contoh.com/foto.jpg"
        ]
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Promo akhir pekan! 🎉",
        "platforms": [
          "facebook"
        ],
        "mediaUrls": [
          "https://contoh.com/foto.jpg"
        ]
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Promo akhir pekan! 🎉",
      "platforms": [
        "facebook"
      ],
      "mediaUrls": [
        "https://contoh.com/foto.jpg"
      ]
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Promo akhir pekan! 🎉",
            "platforms": [
                "facebook",
            ],
            "mediaUrls": [
                "https://contoh.com/foto.jpg",
            ],
        },
    )
    print(res.json())
    • Tanpa foto: hapus mediaUrls, bisa tambah "facebookOptions": { "link": "https://toko-anda.com" }.
    • Video: isi mediaUrls dengan satu URL .mp4.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik (GET /api/analytics/post/{id}): reaksi per jenis, views, reach, klik, dan share. Meta mengisinya beberapa jam setelah posting; jumlah komentar tidak tersedia dengan izin ini.

Instagram

Posting foto, carousel (hingga 10), atau Reels ke akun Instagram Business/Creator.

Yang perlu disiapkan
  • Akun Instagram harus profesional (Bisnis/Kreator) dan tertaut ke Facebook Page (Instagram → Pengaturan → Akun profesional → Facebook).
  • Foto wajib JPEG dan URL-nya bisa diakses publik (Meta mengunduhnya sendiri).
  • Butuh App Review untuk akun di luar peran app.
  1. 1

    Siapkan developer app Meta (Facebook Pages & Instagram) (sekali saja)

    1. Pakai app Meta yang sama dengan Facebook (lihat tab Facebook untuk membuatnya).
    2. Dasbor app → Kasus penggunaan → "Tambahkan lebih banyak ke kasus penggunaan" → "Kelola pesan & konten di Instagram". Tanpa ini login gagal dengan "Invalid Scopes: instagram_basic, …".
    3. Pilih penyiapan API dengan Facebook Login (bukan Instagram Login): medsos-share memposting ke Instagram lewat Facebook Page yang terhubung.
    4. Pastikan izin instagram_basic, instagram_content_publish, instagram_manage_insights berstatus "Siap untuk pengujian" (klik + Tambahkan bila belum).
    5. "ID aplikasi Instagram" dan rahasianya yang tampil di use case itu tidak dipakai: daftarkan ID App Meta utama ke PUT /api/apps/meta.

    Izin (scope) yang dibutuhkan: pages_show_list pages_read_engagement business_management instagram_basic instagram_content_publish instagram_manage_insights

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/instagram

    Mode Development: Redirect URI localhost langsung diterima. Produksi (https): daftarkan di Facebook Login for Business → Pengaturan → "URI Pengalihan OAuth yang Valid".

    Satu app Meta (Facebook Pages & Instagram) dipakai untuk beberapa platform. Kalau App ID-nya sudah pernah disimpan, langkah PUT di bawah tidak perlu diulang.

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/meta" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/meta", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/meta");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/meta",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/instagram/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/instagram/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/instagram/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/instagram/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())
    • Klien login dengan akun Facebook yang mengelola Page tempat akun Instagram-nya terhubung.
    • Kalau ada beberapa akun Instagram, muncul halaman untuk memilih salah satu.

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Graph API Explorer → pilih app Anda → tambahkan izin instagram_basic, instagram_content_publish, pages_show_list → "Generate Access Token".
    2. Jalankan GET me/accounts?fields=instagram_business_account,access_token: igUserId = instagram_business_account.id, accessToken = access_token (token Page).
    curl -X POST "https://socialshare.managebiz.co/api/accounts/instagram" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "igUserId": "IG_USER_ID",
        "accessToken": "ACCESS_TOKEN"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/instagram", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "igUserId": "IG_USER_ID",
        "accessToken": "ACCESS_TOKEN"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/instagram");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "igUserId": "IG_USER_ID",
      "accessToken": "ACCESS_TOKEN"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/instagram",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "igUserId": "IG_USER_ID",
            "accessToken": "ACCESS_TOKEN",
        },
    )
    print(res.json())
  3. 3

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Menu baru minggu ini ☕ #kopi",
        "platforms": [
          "instagram"
        ],
        "mediaUrls": [
          "https://contoh.com/foto.jpg"
        ]
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Menu baru minggu ini ☕ #kopi",
        "platforms": [
          "instagram"
        ],
        "mediaUrls": [
          "https://contoh.com/foto.jpg"
        ]
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Menu baru minggu ini ☕ #kopi",
      "platforms": [
        "instagram"
      ],
      "mediaUrls": [
        "https://contoh.com/foto.jpg"
      ]
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Menu baru minggu ini ☕ #kopi",
            "platforms": [
                "instagram",
            ],
            "mediaUrls": [
                "https://contoh.com/foto.jpg",
            ],
        },
    )
    print(res.json())
    • Instagram wajib ada media; teks saja tidak bisa.
    • Video .mp4 otomatis menjadi Reels.
    • Beberapa URL di mediaUrls = carousel.
    • Posting butuh ±10–25 detik karena Meta memproses media dulu.
    • Instagram tidak menyediakan API hapus: DELETE /api/post/{id} membalas status "error" untuk Instagram, jadi hapus manual di aplikasi.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik: jumlah like dan komentar, tipe media, dan permalink.

Threads

Posting teks, foto, video, atau carousel (hingga 20) ke Threads.

Yang perlu disiapkan
  • Teks maksimal 500 karakter.
  1. 1

    Siapkan developer app Threads (sekali saja)

    1. Di app Meta: "Tambahkan kasus penggunaan" → "Akses Threads API".
    2. Threads punya App ID dan App Secret sendiri (lihat pengaturan kasus penggunaan Threads); daftarkan sebagai app "threads", bukan "meta".

    Izin (scope) yang dibutuhkan: threads_basic threads_content_publish threads_manage_insights

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/threads

    Daftarkan Redirect URI ini di pengaturan kasus penggunaan Threads.

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/threads" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/threads", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/threads");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/threads",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/threads/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/threads/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/threads/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/threads/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Gunakan token long-lived Threads (berlaku 60 hari) dari alur OAuth app Anda sendiri.
    curl -X POST "https://socialshare.managebiz.co/api/accounts/threads" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "userId": "USER_ID",
        "accessToken": "ACCESS_TOKEN",
        "expiresIn": 5184000
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/threads", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "userId": "USER_ID",
        "accessToken": "ACCESS_TOKEN",
        "expiresIn": 5184000
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/threads");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "userId": "USER_ID",
      "accessToken": "ACCESS_TOKEN",
      "expiresIn": 5184000
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/threads",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "userId": "USER_ID",
            "accessToken": "ACCESS_TOKEN",
            "expiresIn": 5184000,
        },
    )
    print(res.json())
  3. 3

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Halo Threads 👋",
        "platforms": [
          "threads"
        ]
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Halo Threads 👋",
        "platforms": [
          "threads"
        ]
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Halo Threads 👋",
      "platforms": [
        "threads"
      ]
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Halo Threads 👋",
            "platforms": [
                "threads",
            ],
        },
    )
    print(res.json())
    • Tambah mediaUrls untuk foto/video.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik: views, likes, replies, reposts, quotes.

TikTok

Posting video atau foto (hingga 35) ke TikTok.

Yang perlu disiapkan
  • Sebelum audit TikTok: hanya bisa privacyLevel SELF_ONLY dan maksimal 5 pengguna.
  • Untuk foto, domain URL media harus diverifikasi di developer portal TikTok.
  1. 1

    Siapkan developer app TikTok (sekali saja)

    1. developers.tiktok.com → Manage apps → buat app.
    2. Tambahkan produk "Login Kit" dan "Content Posting API" (aktifkan Direct Post).

    Izin (scope) yang dibutuhkan: user.info.basic user.info.profile video.publish video.upload

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/tiktok

    Daftarkan di Login Kit → "Redirect URI".

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/tiktok" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/tiktok", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/tiktok");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/tiktok",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/tiktok/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/tiktok/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/tiktok/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/tiktok/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Gunakan token dari alur OAuth TikTok Anda (berlaku 24 jam, refresh token 365 hari).
    curl -X POST "https://socialshare.managebiz.co/api/accounts/tiktok" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "accessToken": "ACCESS_TOKEN",
        "refreshToken": "REFRESH_TOKEN",
        "openId": "OPEN_ID",
        "expiresIn": 86400
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/tiktok", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "accessToken": "ACCESS_TOKEN",
        "refreshToken": "REFRESH_TOKEN",
        "openId": "OPEN_ID",
        "expiresIn": 86400
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/tiktok");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "accessToken": "ACCESS_TOKEN",
      "refreshToken": "REFRESH_TOKEN",
      "openId": "OPEN_ID",
      "expiresIn": 86400
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/tiktok",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "accessToken": "ACCESS_TOKEN",
            "refreshToken": "REFRESH_TOKEN",
            "openId": "OPEN_ID",
            "expiresIn": 86400,
        },
    )
    print(res.json())
  3. 3

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Video baru! #fyp",
        "platforms": [
          "tiktok"
        ],
        "mediaUrls": [
          "https://contoh.com/video.mp4"
        ],
        "tiktokOptions": {
          "privacyLevel": "SELF_ONLY"
        }
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Video baru! #fyp",
        "platforms": [
          "tiktok"
        ],
        "mediaUrls": [
          "https://contoh.com/video.mp4"
        ],
        "tiktokOptions": {
          "privacyLevel": "SELF_ONLY"
        }
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Video baru! #fyp",
      "platforms": [
        "tiktok"
      ],
      "mediaUrls": [
        "https://contoh.com/video.mp4"
      ],
      "tiktokOptions": {
        "privacyLevel": "SELF_ONLY"
      }
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Video baru! #fyp",
            "platforms": [
                "tiktok",
            ],
            "mediaUrls": [
                "https://contoh.com/video.mp4",
            ],
            "tiktokOptions": {
                "privacyLevel": "SELF_ONLY",
            },
        },
    )
    print(res.json())
    • Setelah lolos audit, ganti privacyLevel ke PUBLIC_TO_EVERYONE.
    • Status "pending" berarti TikTok masih memproses video.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik untuk platform ini belum tersedia.

YouTube

Upload video ke channel YouTube.

Yang perlu disiapkan
  • Tanpa audit Google, video yang diupload otomatis menjadi private.
  • Kuota default ±6 upload per hari per project.
  • Selama consent screen berstatus "Testing", refresh token kedaluwarsa dalam 7 hari.
  1. 1

    Siapkan developer app Google (YouTube) (sekali saja)

    1. console.cloud.google.com → buat project → aktifkan "YouTube Data API v3".
    2. Buat OAuth consent screen, lalu Credentials → OAuth client ID tipe "Web application" (app "google").

    Izin (scope) yang dibutuhkan: https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/youtube.force-ssl

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/youtube

    Daftarkan di OAuth client → "Authorized redirect URIs".

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/google" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/google", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/google");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/google",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/youtube/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/youtube/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/youtube/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/youtube/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Gunakan token dari alur OAuth Google Anda dengan access_type=offline (supaya ada refresh token).
    curl -X POST "https://socialshare.managebiz.co/api/accounts/youtube" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "accessToken": "ACCESS_TOKEN",
        "refreshToken": "REFRESH_TOKEN",
        "channelId": "CHANNEL_ID",
        "expiresIn": 3599
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/youtube", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "accessToken": "ACCESS_TOKEN",
        "refreshToken": "REFRESH_TOKEN",
        "channelId": "CHANNEL_ID",
        "expiresIn": 3599
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/youtube");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "accessToken": "ACCESS_TOKEN",
      "refreshToken": "REFRESH_TOKEN",
      "channelId": "CHANNEL_ID",
      "expiresIn": 3599
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/youtube",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "accessToken": "ACCESS_TOKEN",
            "refreshToken": "REFRESH_TOKEN",
            "channelId": "CHANNEL_ID",
            "expiresIn": 3599,
        },
    )
    print(res.json())
  3. 3

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Deskripsi video",
        "platforms": [
          "youtube"
        ],
        "mediaUrls": [
          "https://contoh.com/video.mp4"
        ],
        "youtubeOptions": {
          "title": "Judul video",
          "visibility": "public"
        }
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Deskripsi video",
        "platforms": [
          "youtube"
        ],
        "mediaUrls": [
          "https://contoh.com/video.mp4"
        ],
        "youtubeOptions": {
          "title": "Judul video",
          "visibility": "public"
        }
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Deskripsi video",
      "platforms": [
        "youtube"
      ],
      "mediaUrls": [
        "https://contoh.com/video.mp4"
      ],
      "youtubeOptions": {
        "title": "Judul video",
        "visibility": "public"
      }
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Deskripsi video",
            "platforms": [
                "youtube",
            ],
            "mediaUrls": [
                "https://contoh.com/video.mp4",
            ],
            "youtubeOptions": {
                "title": "Judul video",
                "visibility": "public",
            },
        },
    )
    print(res.json())
    • Wajib tepat satu video dan youtubeOptions.title.
    • Video besar bisa dijawab HTTP 202 "processing"; hasilnya dikirim ke webhook.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik: views, likes, komentar, favorit.

X (Twitter)

Posting tweet dengan teks, hingga 4 foto, atau satu video.

Yang perlu disiapkan
  • X menagih setiap request ke pemilik app (pay-per-use).
  • Teks maksimal 280 karakter (setiap link dihitung 23).
  1. 1

    Siapkan developer app X (Twitter) (sekali saja)

    1. console.x.com → buat app (app "x") dan isi kredit pay-per-use.
    2. User authentication settings: OAuth 2.0, tipe "Web App", izin "Read and write".

    Izin (scope) yang dibutuhkan: tweet.read tweet.write users.read offline.access media.write

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/twitter

    Daftarkan sebagai "Callback URI / Redirect URL" di User authentication settings.

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/x" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/x", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/x");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/x",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/twitter/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/twitter/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/twitter/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/twitter/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Gunakan token OAuth 2.0 user context (berlaku 2 jam) dengan scope tweet.write dan offline.access.
    curl -X POST "https://socialshare.managebiz.co/api/accounts/twitter" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "accessToken": "ACCESS_TOKEN",
        "userId": "USER_ID",
        "refreshToken": "REFRESH_TOKEN",
        "expiresIn": 7200
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/twitter", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "accessToken": "ACCESS_TOKEN",
        "userId": "USER_ID",
        "refreshToken": "REFRESH_TOKEN",
        "expiresIn": 7200
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/twitter");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "accessToken": "ACCESS_TOKEN",
      "userId": "USER_ID",
      "refreshToken": "REFRESH_TOKEN",
      "expiresIn": 7200
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/twitter",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "accessToken": "ACCESS_TOKEN",
            "userId": "USER_ID",
            "refreshToken": "REFRESH_TOKEN",
            "expiresIn": 7200,
        },
    )
    print(res.json())

    Opsional: refreshToken.

  3. 3

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Halo dari medsos-share 🚀",
        "platforms": [
          "twitter"
        ]
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Halo dari medsos-share 🚀",
        "platforms": [
          "twitter"
        ]
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Halo dari medsos-share 🚀",
      "platforms": [
        "twitter"
      ]
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Halo dari medsos-share 🚀",
            "platforms": [
                "twitter",
            ],
        },
    )
    print(res.json())
    • Balas tweet: "twitterOptions": { "replyTo": "<tweet id>" }.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik: likes, reposts, replies, quotes, impressions, bookmarks.

LinkedIn

Posting ke profil pribadi atau company page LinkedIn.

Yang perlu disiapkan
  • Profil pribadi: langsung bisa (self-serve).
  • Company page: ajukan "Community Management API", lalu set options.organizations: true di PUT /api/apps/linkedin.
  1. 1

    Siapkan developer app LinkedIn (sekali saja)

    1. linkedin.com/developers → Create app (butuh LinkedIn Page untuk verifikasi app).
    2. Tab Products: tambahkan "Sign In with LinkedIn using OpenID Connect" dan "Share on LinkedIn".

    Izin (scope) yang dibutuhkan: openid profile w_member_social

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/linkedin

    Daftarkan di tab Auth → "Authorized redirect URLs for your app".

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/linkedin" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/linkedin", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/linkedin");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/linkedin",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/linkedin/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/linkedin/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/linkedin/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/linkedin/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Gunakan token OAuth LinkedIn (berlaku 60 hari) dengan scope w_member_social.
    curl -X POST "https://socialshare.managebiz.co/api/accounts/linkedin" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "accessToken": "ACCESS_TOKEN",
        "authorUrn": "AUTHOR_URN",
        "refreshToken": "REFRESH_TOKEN",
        "expiresIn": 5184000
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/linkedin", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "accessToken": "ACCESS_TOKEN",
        "authorUrn": "AUTHOR_URN",
        "refreshToken": "REFRESH_TOKEN",
        "expiresIn": 5184000
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/linkedin");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "accessToken": "ACCESS_TOKEN",
      "authorUrn": "AUTHOR_URN",
      "refreshToken": "REFRESH_TOKEN",
      "expiresIn": 5184000
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/linkedin",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "accessToken": "ACCESS_TOKEN",
            "authorUrn": "AUTHOR_URN",
            "refreshToken": "REFRESH_TOKEN",
            "expiresIn": 5184000,
        },
    )
    print(res.json())

    Opsional: refreshToken.

  3. 3

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Kami membuka lowongan baru!",
        "platforms": [
          "linkedin"
        ],
        "linkedinOptions": {
          "visibility": "PUBLIC"
        }
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Kami membuka lowongan baru!",
        "platforms": [
          "linkedin"
        ],
        "linkedinOptions": {
          "visibility": "PUBLIC"
        }
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Kami membuka lowongan baru!",
      "platforms": [
        "linkedin"
      ],
      "linkedinOptions": {
        "visibility": "PUBLIC"
      }
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Kami membuka lowongan baru!",
            "platforms": [
                "linkedin",
            ],
            "linkedinOptions": {
                "visibility": "PUBLIC",
            },
        },
    )
    print(res.json())
    • Tambah mediaUrls untuk foto (hingga 20) atau satu video.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik untuk platform ini belum tersedia.

Pinterest

Membuat pin dari foto (hingga 5) atau video.

Yang perlu disiapkan
  • Setiap pin wajib memilih board (boardId).
  1. 1

    Siapkan developer app Pinterest (sekali saja)

    1. developers.pinterest.com → My apps → buat app.
    2. Ajukan upgrade dari Trial ke Standard access (butuh video demo alur login).

    Izin (scope) yang dibutuhkan: boards:read pins:read pins:write user_accounts:read

    Redirect URI:

    https://socialshare.managebiz.co/oauth/callback/pinterest

    Daftarkan di pengaturan app → "Redirect URIs".

    Lalu simpan App ID dan App Secret ke medsos-share. Kuncinya langsung dicek ke platform (kode 113 kalau salah):

    curl -X PUT "https://socialshare.managebiz.co/api/apps/pinterest" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/apps/pinterest", {
      method: "PUT",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "clientId": "APP_ID_ANDA",
        "clientSecret": "APP_SECRET_ANDA"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/apps/pinterest");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "PUT",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "clientId": "APP_ID_ANDA",
      "clientSecret": "APP_SECRET_ANDA"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.put(
        "https://socialshare.managebiz.co/api/apps/pinterest",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "clientId": "APP_ID_ANDA",
            "clientSecret": "APP_SECRET_ANDA",
        },
    )
    print(res.json())
  2. 2

    Hubungkan akun klien (pilih salah satu)

    Cara A: login (disarankan)

    Response berisi "url" yang berlaku 10 menit. Buka url itu di browser klien; setelah klien login dan memberi izin, akunnya otomatis tersambung lalu diarahkan ke "redirect" (opsional).

    curl -X POST "https://socialshare.managebiz.co/api/accounts/pinterest/oauth" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "redirect": "https://app-anda.com/akun"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/pinterest/oauth", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "redirect": "https://app-anda.com/akun"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/pinterest/oauth");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "redirect": "https://app-anda.com/akun"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/pinterest/oauth",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "redirect": "https://app-anda.com/akun",
        },
    )
    print(res.json())

    Cara B: token langsung

    Kalau Anda sudah punya access token dari app Anda sendiri, kirim tokennya tanpa alur login:

    1. Gunakan token OAuth Pinterest (berlaku 30 hari) dengan scope pins:write dan boards:read.
    curl -X POST "https://socialshare.managebiz.co/api/accounts/pinterest" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "accessToken": "ACCESS_TOKEN",
        "refreshToken": "REFRESH_TOKEN",
        "expiresIn": 2592000
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/pinterest", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "accessToken": "ACCESS_TOKEN",
        "refreshToken": "REFRESH_TOKEN",
        "expiresIn": 2592000
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/pinterest");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "accessToken": "ACCESS_TOKEN",
      "refreshToken": "REFRESH_TOKEN",
      "expiresIn": 2592000
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/pinterest",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "accessToken": "ACCESS_TOKEN",
            "refreshToken": "REFRESH_TOKEN",
            "expiresIn": 2592000,
        },
    )
    print(res.json())

    Opsional: refreshToken.

  3. 3

    Posting

    Pin wajib punya boardId. Ambil id board dari akun yang sudah terhubung:

    curl -X GET "https://socialshare.managebiz.co/api/accounts/pinterest/boards" \
      -H "Authorization: Bearer sk_API_KEY_ANDA"
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/pinterest/boards", {
      method: "GET",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
      },
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/pinterest/boards");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
        ],
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.get(
        "https://socialshare.managebiz.co/api/accounts/pinterest/boards",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
    )
    print(res.json())
    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Inspirasi dapur minimalis",
        "platforms": [
          "pinterest"
        ],
        "mediaUrls": [
          "https://contoh.com/foto.jpg"
        ],
        "pinterestOptions": {
          "boardId": "ID_BOARD",
          "title": "Dapur minimalis",
          "link": "https://toko-anda.com"
        }
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Inspirasi dapur minimalis",
        "platforms": [
          "pinterest"
        ],
        "mediaUrls": [
          "https://contoh.com/foto.jpg"
        ],
        "pinterestOptions": {
          "boardId": "ID_BOARD",
          "title": "Dapur minimalis",
          "link": "https://toko-anda.com"
        }
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Inspirasi dapur minimalis",
      "platforms": [
        "pinterest"
      ],
      "mediaUrls": [
        "https://contoh.com/foto.jpg"
      ],
      "pinterestOptions": {
        "boardId": "ID_BOARD",
        "title": "Dapur minimalis",
        "link": "https://toko-anda.com"
      }
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Inspirasi dapur minimalis",
            "platforms": [
                "pinterest",
            ],
            "mediaUrls": [
                "https://contoh.com/foto.jpg",
            ],
            "pinterestOptions": {
                "boardId": "ID_BOARD",
                "title": "Dapur minimalis",
                "link": "https://toko-anda.com",
            },
        },
    )
    print(res.json())
    • Video pin butuh pinterestOptions.coverImageUrl.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik untuk platform ini belum tersedia.

Telegram

Kirim pesan, foto, atau video ke channel/grup Telegram lewat bot.

Yang perlu disiapkan
  • Buat bot di @BotFather, lalu jadikan bot itu admin di channel/grup.
  • Tidak perlu developer app atau review.
  1. 1

    Hubungkan akun klien

    Kredensial diverifikasi ke platform dulu, lalu disimpan terenkripsi.

    curl -X POST "https://socialshare.managebiz.co/api/accounts/telegram" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "botToken": "123456789:AAH-token-dari-botfather",
        "chatId": "@nama_channel"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/telegram", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "botToken": "123456789:AAH-token-dari-botfather",
        "chatId": "@nama_channel"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/telegram");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "botToken": "123456789:AAH-token-dari-botfather",
      "chatId": "@nama_channel"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/telegram",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "botToken": "123456789:AAH-token-dari-botfather",
            "chatId": "@nama_channel",
        },
    )
    print(res.json())
  2. 2

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Halo channel! 📢",
        "platforms": [
          "telegram"
        ]
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Halo channel! 📢",
        "platforms": [
          "telegram"
        ]
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Halo channel! 📢",
      "platforms": [
        "telegram"
      ]
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Halo channel! 📢",
            "platforms": [
                "telegram",
            ],
        },
    )
    print(res.json())
    • Format teks: "telegramOptions": { "parseMode": "HTML" }.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik untuk platform ini belum tersedia.

Bluesky

Posting teks, hingga 4 foto, atau satu video ke Bluesky.

Yang perlu disiapkan
  • Buat App Password di Bluesky: Settings → Privacy and Security → App Passwords.
  • Tidak perlu developer app atau review.
  1. 1

    Hubungkan akun klien

    Kredensial diverifikasi ke platform dulu, lalu disimpan terenkripsi.

    curl -X POST "https://socialshare.managebiz.co/api/accounts/bluesky" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "identifier": "nama.bsky.social",
        "appPassword": "xxxx-xxxx-xxxx-xxxx"
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/accounts/bluesky", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "identifier": "nama.bsky.social",
        "appPassword": "xxxx-xxxx-xxxx-xxxx"
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/accounts/bluesky");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "identifier": "nama.bsky.social",
      "appPassword": "xxxx-xxxx-xxxx-xxxx"
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/accounts/bluesky",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "identifier": "nama.bsky.social",
            "appPassword": "xxxx-xxxx-xxxx-xxxx",
        },
    )
    print(res.json())
  2. 2

    Posting

    curl -X POST "https://socialshare.managebiz.co/api/post" \
      -H "Authorization: Bearer sk_API_KEY_ANDA" \
      -H "Content-Type: application/json" \
      -d '{
        "post": "Halo Bluesky 🦋",
        "platforms": [
          "bluesky"
        ]
      }'
    const res = await fetch("https://socialshare.managebiz.co/api/post", {
      method: "POST",
      headers: {
        "Authorization": "Bearer sk_API_KEY_ANDA",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        "post": "Halo Bluesky 🦋",
        "platforms": [
          "bluesky"
        ]
      }),
    });
    console.log(await res.json());
    <?php
    $ch = curl_init("https://socialshare.managebiz.co/api/post");
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Authorization: Bearer sk_API_KEY_ANDA",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => <<<'JSON'
    {
      "post": "Halo Bluesky 🦋",
      "platforms": [
        "bluesky"
      ]
    }
    JSON,
    ]);
    $data = json_decode(curl_exec($ch), true);
    print_r($data);
    import requests
    
    res = requests.post(
        "https://socialshare.managebiz.co/api/post",
        headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
        json={
            "post": "Halo Bluesky 🦋",
            "platforms": [
                "bluesky",
            ],
        },
    )
    print(res.json())
    • Teks maksimal 300 karakter.
    • Jadwalkan: tambahkan "scheduleDate": "2026-11-01T09:00:00+07:00".
    • Cek hasil: GET /api/post/{id} dengan id dari response. Hapus: DELETE /api/post/{id}.
    • Analitik: likes, reposts, replies, quotes.

Posting ke banyak platform sekaligus

Setelah beberapa akun terhubung, cukup sebutkan semuanya di "platforms" (atau ["all"]). Hasilnya per platform ada di "postIds" dan "errors".

curl -X POST "https://socialshare.managebiz.co/api/post" \
  -H "Authorization: Bearer sk_API_KEY_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "post": "Satu posting, banyak platform 🚀",
    "platforms": [
      "facebook",
      "instagram",
      "telegram"
    ],
    "mediaUrls": [
      "https://contoh.com/foto.jpg"
    ]
  }'
const res = await fetch("https://socialshare.managebiz.co/api/post", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk_API_KEY_ANDA",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "post": "Satu posting, banyak platform 🚀",
    "platforms": [
      "facebook",
      "instagram",
      "telegram"
    ],
    "mediaUrls": [
      "https://contoh.com/foto.jpg"
    ]
  }),
});
console.log(await res.json());
<?php
$ch = curl_init("https://socialshare.managebiz.co/api/post");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer sk_API_KEY_ANDA",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "post": "Satu posting, banyak platform 🚀",
  "platforms": [
    "facebook",
    "instagram",
    "telegram"
  ],
  "mediaUrls": [
    "https://contoh.com/foto.jpg"
  ]
}
JSON,
]);
$data = json_decode(curl_exec($ch), true);
print_r($data);
import requests

res = requests.post(
    "https://socialshare.managebiz.co/api/post",
    headers={"Authorization": "Bearer sk_API_KEY_ANDA"},
    json={
        "post": "Satu posting, banyak platform 🚀",
        "platforms": [
            "facebook",
            "instagram",
            "telegram",
        ],
        "mediaUrls": [
            "https://contoh.com/foto.jpg",
        ],
    },
)
print(res.json())