PostinganPublikasikan postingan

Postingan

Publikasikan postingan

Aplikasi live memublikasikan langsung, menjadwalkan, atau menyimpan draf; aplikasi uji hanya mensimulasikan. Dengan ?dry_run=true semua dicek tanpa menulis.

POSThttps://api.sofia-post.com/api/v1/posts
POSThttps://api.sofia-post.com/api/v1/posts

Publikasikan postingan

Aplikasi live memublikasikan langsung, menjadwalkan, atau menyimpan draf; aplikasi uji hanya mensimulasikan. Dengan ?dry_run=true semua dicek tanpa menulis.

Otorisasi

Authorizationstringwajib

Kunci pribadi atau access token OAuth Anda, dikirim sebagai Bearer <token>.

Hanya disimpan di tab ini, dan hanya dikirim ke api.sofia-post.com. Dapatkan kunci API

Parameter query

dry_runstring

true: menjalankan setiap pemeriksaan yang dilakukan pengiriman (aturan jaringan, akun, media, pembuatan, langganan live) tanpa menulis apa pun. Mengembalikan 200 ready atau 422 post_refused.

Header

Idempotency-Keystring

Bila diulang dengan body yang sama, permintaan mengembalikan respons yang sama tanpa membuat postingan kedua. Dry run tidak memakai kunci ini.

Body

Permintaan ini bertindak pada akun asli Anda.

Postingan milik sebuah usaha dan terbit ke satu atau beberapa jaringan, target-nya. Setiap target punya teks, media, format, dan statusnya sendiri.

Jenis postingan: sekarang, terjadwal, atau draf

Dua kolom pada isi permintaan menentukan kapan, dan apakah, postingan terbit:

KasusIsiPerilaku
Sekarangtanpa scheduledAtPostingan langsung terbit.
TerjadwalscheduledAt: tanggal-jam ISO 8601 di masa depanAkan terbit pada scheduledAt.
Draf"status": "draft", tanpa scheduledAtDisimpan dan tidak terbit.

Isi sebuah postingan

KolomArti
establishmentIdUsaha yang menerbitkan (GET /v1/establishments)
targets[]Satu entri per jaringan: platform, text, dan opsional media, format, dan accountId
targets[].media[]Media dari pustaka lewat id-nya, atau url https publik dengan type-nya (image atau video)
targets[].accountIdAkun yang dipakai saat usaha punya beberapa di jaringan itu
scheduledAtTanggal-jam ISO 8601 di masa depan; jika tidak ada, postingan langsung terbit
statusdraft untuk menyimpan draf yang tidak terbit (maka tanpa scheduledAt)

Media sebuah target

Setiap entri targets[].media menunjuk media dari pustaka lewat id-nya, atau url https publik dengan type-nya (image atau video). Instagram dan TikTok mewajibkan foto atau video. Untuk menambahkan media ke pustaka media, lihat Mengimpor media.

Menduplikasi postingan

Tidak ada endpoint khusus untuk menduplikasi postingan: bacalah dengan `GET /v1/posts/{id}`, lalu kirim ulang isinya dalam permintaan POST /v1/posts yang baru.

Sebelum mengirim ulang, hapus kolom yang diisi Sofia sendiri. Setidaknya:

  • id dan createdAt postingan;
  • status postingan yang dibaca (merangkum status pengiriman): tentukan yang Anda mau, atau hilangkan;
  • di setiap target: state, publishedAt, permalink, dan error.

Pertahankan establishmentId, dan untuk setiap target platform dan accountId. Pembacaan tidak mengembalikan teks target maupun medianya: sediakan lagi. Terakhir, tentukan scheduledAt baru (atau hilangkan untuk menerbitkan langsung, atau kirim "status": "draft").

Postingan pertama Anda

1. Memeriksa jaringan terhubung

Sebuah postingan terbit lewat akun yang terhubung ke usaha. Daftarkan akun itu; jika ada yang kurang, buat tautan koneksi. Lihat Akun terhubung.

2. Menambahkan media

Instagram dan TikTok mewajibkan foto atau video. Impor satu dari URL https publik; Sofia mengunduhnya ke pustaka media dan mengembalikan id-nya. Lihat Mengimpor media.

3. Memeriksa dengan simulasi

Tambahkan ?dry_run=true: Sofia menilai setiap jaringan menurut aturan aslinya dan akun terhubung, dan tidak menulis apa pun.

curl -X POST 'https://api.sofia-post.com/api/v1/posts?dry_run=true' \
  -H "Authorization: Bearer $SOFIA_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "establishmentId": "'$ESTABLISHMENT_ID'",
    "targets": [
      { "platform": "instagram", "text": "Tarte tatin du jour", "media": [{ "id": "'$MEDIA_ID'" }] },
      { "platform": "facebook", "text": "Tarte tatin du jour", "media": [{ "id": "'$MEDIA_ID'" }] }
    ]
  }'
{
  "status": "ready",
  "dryRun": true,
  "targets": [
    { "platform": "instagram", "accountId": "fecd0904-…", "handle": "sof_ia_officiel", "state": "ready" },
    { "platform": "facebook", "accountId": "a423b3a4-…", "handle": "Sofia post", "state": "ready" }
  ]
}

4. Menerbitkan

Kirim isi yang sama tanpa dry_run, dengan Idempotency-Key agar percobaan ulang tidak pernah menerbitkan dua kali. Tanpa scheduledAt, postingan langsung terbit; dengan scheduledAt di masa depan, postingan dijadwalkan.

curl -X POST https://api.sofia-post.com/api/v1/posts \
  -H "Authorization: Bearer $SOFIA_API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @post.json

5. Memantaunya

Postingan menjawab publishing, lalu setiap jaringan berubah menjadi published dengan tautan permanennya, atau failed dengan alasannya. Baca dengan `GET /v1/posts/{id}`, atau daftarkan webhook agar diberi tahu.

Simulasi (dry run)

POST /v1/posts?dry_run=true menjalankan pemeriksaan postingan sungguhan: aturan setiap jaringan, akun terhubung, media, tanggal, dan paket Anda. Tidak menyimpan dan tidak mengirim apa pun.

Siap

Jika setiap jaringan akan menerima postingan, responsnya 200 dengan status: "ready" dan, untuk setiap target, akun yang akan menerbitkan.

Ditolak

Jika tidak, responsnya 422 post_refused, dengan satu rincian per alasan. Setiap rincian menyebutkan jaringannya, code-nya, dan apa yang harus diperbaiki.

{
  "error": {
    "code": "post_refused",
    "message": "The post would not be published: x: the text is too long (300 characters, at most 280)",
    "details": [
      {
        "platform": "x",
        "code": "caption_too_long",
        "max": 280,
        "actual": 300,
        "message": "x: the text is too long (300 characters, at most 280)"
      }
    ],
    "docUrl": "https://www.sofia-post.com/developers/errors#post_refused"
  }
}

Setiap alasan terdaftar di kesalahan.

Untuk mode uji aplikasi, lihat Mode uji dan simulasi. Idempotency-Key juga melindungi POST /v1/posts: lihat Idempotensi.

Otorisasi

  • Authorizationstringheaderwajib

    Kunci pribadi atau access token OAuth Anda, dikirim sebagai Bearer <token>.

Parameter query

  • dry_runstring

    true: menjalankan setiap pemeriksaan yang dilakukan pengiriman (aturan jaringan, akun, media, pembuatan, langganan live) tanpa menulis apa pun. Mengembalikan 200 ready atau 422 post_refused.

    Nilai yang diizinkan: truefalse

Header

  • Idempotency-Keystring

    Bila diulang dengan body yang sama, permintaan mengembalikan respons yang sama tanpa membuat postingan kedua. Dry run tidak memakai kunci ini.

Body

application/json
  • establishmentIdstringwajib

    Usaha, di Workspace grant token (GET /v1/establishments)

  • targetsobject[]wajib

    Satu jaringan per target

    Tampilkan atribut turunan
    • platformstringwajib

      Jaringan yang dituju

      Nilai yang diizinkan: instagramfacebookxlinkedintiktok

    • textstringwajib

      Caption yang dipublikasikan di jaringan ini

    • mediaobject[]

      Media terlampir

      Tampilkan atribut turunan
      • idstring

        Pengenal media di pustaka usaha (jika tidak, url dan type)

      • urlstring

        Alamat publik media (https di live); tanpa pengenal

      • typestring

        Jenis media yang diberikan lewat alamat

        Nilai yang diizinkan: imagevideo

    • formatstring

      Format (post, reel, story, carousel...); default-nya yang akan disajikan jaringan

    • accountIdstring

      Live: akun terhubung yang memublikasikan, bila usaha memiliki beberapa di jaringan ini (GET /v1/establishments/:id/accounts)

  • scheduledAtstring<date-time>

    Tanggal penjadwalan (ISO 8601), di masa depan; tidak diisi: publikasikan segera. Tidak boleh bersama status draft

  • statusstring

    draft: sebuah draf (hanya live), dibuat tanpa tanggal, tidak ada yang dikirim; PATCH /v1/posts/:id menjadwalkannya

    Nilai yang diizinkan: draft

Respons

Dry run: semua pemeriksaan lolos.

  • statusstringwajib

    Selalu ready

    Nilai yang diizinkan: ready

  • dryRunbooleanwajib

    Selalu true

    Nilai yang diizinkan: true

  • targetsobject[]wajib

    Target yang diperiksa

    Tampilkan atribut turunan
    • platformstringwajib

      Jaringan target

    • statestringwajib

      Selalu ready

      Nilai yang diizinkan: ready

    • accountIdstring

      Live: akun yang akan memublikasikan

    • handlestring

      Live: handle yang ditampilkan

Apakah halaman ini membantu?