APIMaster.ai

Penawaran Seedance dan tanda terima penagihan

Estimasi biaya pembuatan Seedance dan verifikasi debit akhir menggunakan tanda terima penagihan yang terotentikasi dan persisten.

Penawaran Seedance dan tanda terima penagihan

Berlaku untuk seedance-2.0, seedance-2.5, seedance-2.0-fast, dan seedance-2.0-mini, di semua kanal pembuatan. Base URL: https://apimaster.ai/v1 (https://apimaster.ai/v1). Autentikasikan semua permintaan dengan Authorization: Bearer YOUR_API_KEY.

Mendapatkan estimasi

POST https://apimaster.ai/v1/videos/quote menerima parameter JSON yang sama dengan permintaan pembuatan video standar, termasuk model, prompt, duration, resolution, video_urls, dan pengaturan pembuatan lain yang didukung. Penawaran untuk pembuatan draf, peningkatan draf, dan remix saat ini belum didukung.

curl "https://apimaster.ai/v1/videos/quote" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"seedance-2.0","prompt":"A paper boat on a pond","duration":4,"resolution":"480p","generate_audio":false}'

Respons berisi object: "video.quote", quote_id, expires_at (detik Unix), binding: false, funds_reserved: false, dan objek billing yang dijelaskan di bawah. Penawaran memiliki masa berlaku saran selama lima menit. Penawaran tidak mendebit dana, membuat tugas, atau memulai pembuatan di penyedia. Karena itu billing.reserved_amount bernilai "0.000000". ID penawaran bersifat informatif; bukan token otorisasi atau penguncian harga dan tidak perlu disertakan saat pembuatan.

Harga dihitung ulang pada saat pengiriman sebenarnya dan dibekukan untuk tugas tersebut. Estimasi bukan jaminan biaya maksimum. Tugas yang selesai dapat berbiaya lebih mahal atau lebih murah daripada estimasi. Permintaan durasi otomatis menggunakan estimasi keluaran 30 detik; requested_output_seconds bernilai -1.

Pembuatan tetap tunduk pada validasi penyedia. Untuk permintaan perpanjangan video Seedance 2.5, setel secara eksplisit aspect_ratio: "adaptive"; penolakan oleh penyedia ditangani melalui siklus pengembalian dana normal.

Mengambil tanda terima tugas

curl "https://apimaster.ai/v1/videos/task_xxx/billing" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /v1/videos/{task_id}/billing mengembalikan object: "video.billing_receipt" dan billing. Hanya kunci API yang termasuk dalam akun pemilik tugas yang dapat mengambilnya. Tugas yang tidak diketahui, milik pihak lain, dan tugas lama tanpa tanda terima mengembalikan HTTP 404. Tanda terima dibuat untuk tugas baru setelah fitur ini diaktifkan; tugas lama tidak direkonstruksi secara retrospektif.

Objek billing yang sama disertakan dalam kedua respons kueri tugas:

  • GET /v1/videos/{task_id}: billing di tingkat atas.
  • GET /v1/video/generations/{task_id}: data.billing.

settlement_status bernilai pending, settled, atau refunded; respons penawaran menggunakan estimate. Penyelesaian tugas dan penyelesaian keuangan adalah hal terpisah: perlakukan jumlah sebagai final hanya ketika tanda terima berstatus settled atau refunded. Permintaan tanda terima berulang tidak menjalankan pembuatan, penyelesaian, atau pengembalian dana. Tanda terima yang telah difinalisasi mempertahankan ID dan isi tanda terima yang sama, termasuk setelah pengembalian dana.

Contoh permintaan dan respons lengkap

Kedua contoh menggunakan Seedance 2.0 pada 480P, keluaran yang diminta 4 detik, satu referensi yang diukur 4,042 detik, pengali kanal 1 dan pengali akun 1,05. Durasi dan jumlah penyelesaian berasal dari pengujian langsung; penawaran adalah contoh ilustratif yang disusun untuk input yang cocok. ID dan URL media adalah placeholder. Tarif sebenarnya berasal dari respons API Anda.

1. Mendapatkan penawaran

POST https://apimaster.ai/v1/videos/quote, JSON permintaan:

{
  "model": "seedance-2.0",
  "prompt": "A paper boat moves gently on a pond.",
  "duration": 4,
  "resolution": "480p",
  "video_urls": [
    "https://example.com/reference.mp4"
  ]
}
Field Tipe Arti
model string ID model, di sini seedance-2.0.
prompt string Prompt pembuatan.
duration integer Detik keluaran yang diminta, bukan durasi video referensi.
resolution string Resolusi keluaran, di sini 480p.
video_urls array URL video referensi. Ganti placeholder dengan media yang dapat diakses; server mengukur setiap file.

Respons penawaran:

{
  "object": "video.quote",
  "quote_id": "quote_example",
  "expires_at": 1790949324,
  "binding": false,
  "funds_reserved": false,
  "billing": {
    "schema_version": "1",
    "settlement_status": "estimate",
    "model": "seedance-2.0",
    "resolution": "480P",
    "tariff_variant": "480P-input",
    "tariff_revision": "sd-v1-b79a35d3a29af9af",
    "currency": "USD",
    "unit": "second",
    "base_unit_rate": "0.04319",
    "channel_multiplier": 1,
    "account_multiplier": 1.05,
    "effective_unit_rate": "0.0453495",
    "requested_output_seconds": 4,
    "estimated_output_seconds": 4,
    "estimated_billable_seconds": 9,
    "input_videos": [
      {
        "index": 0,
        "media_id": "media_example_hash",
        "measured_seconds": 4.042,
        "billable_seconds": 5,
        "duration_source": "apimaster_probe"
      }
    ],
    "billable_input_video_seconds": 5,
    "output": null,
    "billable_seconds": null,
    "rounding": {
      "amount_formula": "round(total_billable_seconds * effective_unit_rate / account_unit_usd) * account_unit_usd",
      "effective_unit_rate": "nearest_decimal_12_places_half_up",
      "input_video": "ceil_each_file_then_sum",
      "money": "nearest_account_unit_half_up",
      "output_video": "nearest_integer_half_up"
    },
    "estimated_amount": "0.408146",
    "reserved_amount": "0.000000",
    "additional_debit_amount": "0.000000",
    "final_debit_amount": null,
    "refunded_amount": "0.000000",
    "net_amount": null,
    "initial_quota_units": 0,
    "final_quota_units": null,
    "account_unit_usd": "0.000002",
    "media_charges": {
      "audio": "0.000000",
      "image": "0.000000",
      "input_video_unrounded": "0.2267475",
      "other_reference": "0.000000",
      "output_video_unrounded": "0.181398"
    },
    "final_debit_may_exceed_estimate": true,
    "created_at": 1790949024,
    "settled_at": null
  }
}

Input selama 4,042 detik dibulatkan ke atas menjadi 5 detik. Dengan 4 detik keluaran yang diperkirakan, estimasi mencakup 9 detik dan berbiaya 0,408146 USD. Penawaran tidak mendebit dana; jumlah final tetap null.

2. Mengirim pembuatan dan menanyakan penyelesaian

Setelah mengirim ke POST https://apimaster.ai/v1/videos/generations, respons awal berisi ID tugas:

{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_example"
    }
  ]
}

Kemudian kueri GET https://apimaster.ai/v1/videos/task_example menggunakan kunci API dari akun yang sama. Setelah pembuatan dan penyelesaian selesai:

{
  "actual_time": 189,
  "billing": {
    "schema_version": "1",
    "receipt_id": "bill_task_example",
    "task_id": "task_example",
    "settlement_status": "settled",
    "model": "seedance-2.0",
    "resolution": "480P",
    "tariff_variant": "480P-input",
    "tariff_revision": "sd-v1-b79a35d3a29af9af",
    "currency": "USD",
    "unit": "second",
    "base_unit_rate": "0.04319",
    "channel_multiplier": 1,
    "account_multiplier": 1.05,
    "effective_unit_rate": "0.0453495",
    "requested_output_seconds": 4,
    "estimated_output_seconds": 4,
    "estimated_billable_seconds": 9,
    "input_videos": [
      {
        "index": 0,
        "media_id": "media_example_hash",
        "measured_seconds": 4.042,
        "billable_seconds": 5,
        "duration_source": "apimaster_probe"
      }
    ],
    "billable_input_video_seconds": 5,
    "output": {
      "actual_seconds": 4,
      "billable_seconds": 4,
      "duration_source": "provider_reported"
    },
    "billable_seconds": 9,
    "rounding": {
      "amount_formula": "round(total_billable_seconds * effective_unit_rate / account_unit_usd) * account_unit_usd",
      "effective_unit_rate": "nearest_decimal_12_places_half_up",
      "input_video": "ceil_each_file_then_sum",
      "money": "nearest_account_unit_half_up",
      "output_video": "nearest_integer_half_up"
    },
    "estimated_amount": "0.408146",
    "reserved_amount": "0.408146",
    "additional_debit_amount": "0.000000",
    "final_debit_amount": "0.408146",
    "refunded_amount": "0.000000",
    "net_amount": "0.408146",
    "initial_quota_units": 204073,
    "final_quota_units": 204073,
    "account_unit_usd": "0.000002",
    "media_charges": {
      "audio": "0.000000",
      "image": "0.000000",
      "input_video_unrounded": "0.2267475",
      "other_reference": "0.000000",
      "output_video_unrounded": "0.181398"
    },
    "final_debit_may_exceed_estimate": true,
    "created_at": 1790949024,
    "settled_at": 1790949213
  },
  "completed_at": 1790949213,
  "created_at": 1790949024,
  "id": "task_example",
  "metadata": {
    "url": "https://apimaster.ai/v1/videos/task_example/content"
  },
  "model": "seedance-2.0",
  "object": "video",
  "progress": 100,
  "status": "completed",
  "task_id": "task_example",
  "usage": {
    "completion_tokens": 80770
  }
}

Debit awal sama dengan biaya final di sini, tanpa debit atau pengembalian dana tambahan. billing.output.actual_seconds adalah durasi keluaran; actual_time adalah waktu pemrosesan. usage.completion_tokens tidak menentukan biaya. Field opsional dapat bervariasi menurut kanal.

GET https://apimaster.ai/v1/videos/task_example/billing mengembalikan { "object": "video.billing_receipt", "billing": ... } dengan objek billing yang sama. Kueri kompatibilitas GET https://apimaster.ai/v1/video/generations/task_example menempatkannya di bawah data.billing.

Field respons luar

Field Tipe Arti
object string Jenis respons: video.quote, video, atau video.billing_receipt.
quote_id string Pengenal penawaran informatif; bukan penguncian harga atau otorisasi pembuatan.
expires_at integer Kedaluwarsa penawaran saran dalam detik Unix, biasanya waktu pembuatan ditambah 300 detik.
binding boolean Saat ini false; penawaran tidak menjamin jumlah final.
funds_reserved boolean Saat ini false; penawaran tidak mendebit atau menyimpan dana.
billing object Detail penagihan yang didokumentasikan satu per satu di bawah.
code integer Kode respons pengiriman; 200 berarti terkirim, bukan selesai.
data array Daftar tugas yang dikirim; kueri kompatibilitas menggunakan objek untuk data.
data[].status string Status pengiriman, dalam contoh ini submitted.
data[].task_id string Pengenal tugas publik yang digunakan untuk kueri berikutnya.
id string ID tugas publik dalam kueri penyelesaian.
task_id string Pengenal tugas, sama dengan id dalam contoh ini.
model string Nama model pembuatan publik.
status string Status tugas; completed berarti pembuatan selesai. Periksa billing.settlement_status untuk penyelesaian final.
progress number Persentase progres; 100 saat selesai dalam contoh ini.
actual_time number Detik pemrosesan tugas, bukan durasi video keluaran.
created_at integer Timestamp pembuatan tugas dalam detik Unix.
completed_at integer Timestamp penyelesaian tugas dalam detik Unix.
metadata object Metadata hasil pembuatan.
metadata.url string URL unduhan konten video.
usage object Informasi penggunaan penyedia; dapat tidak ada tergantung kanal.
usage.completion_tokens integer Jumlah token penyedia; tidak digunakan untuk penagihan per detik keempat model ini.

Skema penagihan

Semua jumlah moneter dan tarif satuan berupa string desimal. Durasi waktu dalam detik. Field yang dapat bernilai null berupa JSON null hingga tersedia.

Field Tipe Arti
schema_version string Versi skema penagihan, "1" dalam contoh ini.
receipt_id string Pengenal tanda terima yang stabil; tidak ada pada penawaran.
task_id string ID tugas publik yang terkait dengan tanda terima; tidak ada pada penawaran.
settlement_status string estimate, pending, settled, refunded
model string ID model publik yang diterapkan.
resolution string Resolusi ternormalisasi yang digunakan untuk penagihan.
tariff_variant string Tingkat tarif; -input menunjukkan video referensi, dengan tarif ini berlaku untuk input dan output.
tariff_revision string Sidik jari model, tingkat tarif, tarif dasar yang dikonfigurasi, dan versi aturan penagihan
currency string Mata uang biaya, saat ini USD.
unit string Satuan tarif; second berarti per detik.
base_unit_rate decimal string Harga dasar per detik yang dikonfigurasi untuk model dan tingkat ini.
channel_multiplier number Pengali harga kanal agregat yang diterapkan.
account_multiplier number Pengali akun/grup yang diterapkan, 1,05 dalam contoh ini.
effective_unit_rate decimal string Tarif per detik yang diterapkan, dibekukan saat pengiriman dan dibulatkan hingga 12 tempat desimal.
requested_output_seconds integer Durasi keluaran yang diminta; -1 untuk durasi otomatis
estimated_output_seconds integer Perkiraan detik keluaran; durasi otomatis diperkirakan 30 detik.
estimated_billable_seconds integer Total awal perkiraan detik yang dapat ditagih, termasuk video referensi dan keluaran yang diperkirakan.
input_videos array Pengukuran server per referensi, sesuai urutan permintaan
input_videos[].index integer Posisi video referensi dalam permintaan, dimulai dari nol.
input_videos[].media_id string Hash media berlingkup akun atau ID aset yang dimiliki; URL video referensi tidak dikembalikan.
input_videos[].measured_seconds number or null Durasi yang diukur server sebelum pembulatan; dapat null untuk aset cache lama
input_videos[].billable_seconds integer Durasi yang dapat ditagih setelah pembulatan untuk referensi ini
input_videos[].duration_source string apimaster_probe atau apimaster_asset_cache
billable_input_video_seconds integer Jumlah detik yang dapat ditagih per referensi
output object or null Informasi durasi keluaran final, tersedia setelah penyelesaian berhasil
output.actual_seconds number or null Durasi keluaran aktual yang dilaporkan/diukur; null jika tidak tersedia
output.billable_seconds integer Detik keluaran yang benar-benar digunakan dalam penyelesaian
output.duration_source string provider_reported, apimaster_probe, provider_billable_seconds, requested_duration_fallback, atau reservation_fallback
billable_seconds integer or null Total akhir detik input/output yang dapat ditagih
rounding object Aturan pembulatan input, output, dan uang serta rumus jumlah
estimated_amount decimal string Biaya estimasi awal, bukan jumlah final atau jaminan biaya maksimum.
reserved_amount decimal string Debit akun awal saat pengiriman, nol untuk penawaran; bukan penahanan otorisasi bank.
additional_debit_amount decimal string Debit tambahan ketika biaya final melebihi debit awal.
final_debit_amount decimal string or null Biaya neto final tugas setelah penyesuaian; nol setelah pengembalian dana penuh
net_amount decimal string or null Biaya neto final tugas setelah penyesuaian; nol setelah pengembalian dana penuh
refunded_amount decimal string Jumlah yang dikembalikan dari debit awal; sama dengan debit awal pada pengembalian dana penuh.
initial_quota_units integer Unit akun yang didebit secara tepat di awal; nol untuk penawaran.
final_quota_units integer or null Unit akun yang tepat dari biaya neto final; null selama pending, nol setelah pengembalian dana penuh.
account_unit_usd decimal string "0.000002" per unit akun
media_charges object image, audio, other_reference bernilai nol di bawah tarif saat ini; input_video_unrounded dan output_video_unrounded memisahkan komponen video sebelum pembulatan moneter final
final_debit_may_exceed_estimate boolean true; estimasi bukan batas pengeluaran yang ketat
created_at integer Timestamp pembuatan detail penagihan dalam detik Unix.
settled_at integer or null Timestamp penyelesaian atau pengembalian dana final dalam detik Unix; null hingga difinalisasi.
Field Tipe Arti
rounding.input_video string ceil_each_file_then_sum: bulatkan setiap file input ke atas, lalu jumlahkan.
rounding.output_video string nearest_integer_half_up: detik keluaran terdekat, setengah detik dibulatkan ke atas.
rounding.effective_unit_rate string nearest_decimal_12_places_half_up: bulatkan tarif efektif hingga 12 tempat desimal.
rounding.money string nearest_account_unit_half_up: bulatkan jumlah gabungan ke unit akun.
rounding.amount_formula string Rumus jumlah gabungan final; jumlah input dan output tidak dibulatkan secara terpisah.
media_charges.input_video_unrounded decimal string Komponen video input sebelum pembulatan moneter.
media_charges.output_video_unrounded decimal string Komponen video output sebelum pembulatan moneter.
media_charges.image decimal string Biaya tambahan gambar terpisah, saat ini nol.
media_charges.audio decimal string Biaya tambahan audio terpisah, saat ini nol.
media_charges.other_reference decimal string Biaya tambahan referensi lain, saat ini nol.

Menghitung ulang biaya final

Dengan video referensi, tingkat input video berlaku untuk detik keluaran dan detik video referensi. Gambar dan audio tidak memiliki biaya tambahan terpisah di bawah tarif Seedance saat ini. Jumlah token dan biaya penyedia bukan masukan penagihan.

  1. Bulatkan durasi terukur setiap video referensi ke atas secara independen, lalu jumlahkan: input_seconds = sum(ceil(each_video_duration)).
  2. Bulatkan durasi keluaran ke detik bilangan bulat terdekat, dengan setengah detik positif dibulatkan ke atas.
  3. Jumlahkan detik input dan output yang dapat ditagih.
  4. Kalikan dengan effective_unit_rate, bagi dengan account_unit_usd, lalu bulatkan total sekali ke unit akun bilangan bulat terdekat, dengan setengah unit positif dibulatkan ke atas.
final_quota_units = round_half_up(billable_seconds × effective_unit_rate / 0.000002)
net_amount = final_quota_units × 0.000002
net_amount = reserved_amount + additional_debit_amount - refunded_amount

Gunakan aritmetika desimal. Jangan bulatkan komponen moneter input dan output secara terpisah. Sebagai contoh, tugas Seedance 2.0 selama 4 detik pada 480P, tanpa video referensi, dengan tarif dasar 0.07031, pengali kanal 1, dan pengali akun 1.05, memiliki tarif efektif 0.0738255 dan biaya neto 0.295302 USD (147651 unit akun).

APIMaster mengukur durasi video referensi, alih-alih mempercayai field klien seperti input_seconds atau reference_seconds. duration/seconds yang diminta mengontrol durasi keluaran. Untuk keluaran, penyelesaian lebih memilih durasi yang dilaporkan penyedia dan mengukur keluaran bila diperlukan; pengukuran yang tidak tersedia dapat jatuh ke detik yang dapat ditagih oleh penyedia atau durasi yang diminta/direservasi. Tanda terima secara eksplisit menandai sumbernya. Fallback tidak pernah ditandai sebagai durasi aktual yang diukur secara independen. Aset cache yang ada atau draf lama yang diwarisi mungkin kehilangan detail pengukuran per file yang lengkap.

actual_time dalam respons video adalah waktu pemrosesan tugas, bukan durasi video keluaran. usage.completion_tokens, bila ada, bersifat informatif.

Kegagalan dan pengembalian dana

Kegagalan tugas penyedia dan batas waktu 24 jam untuk tugas yang belum selesai memicu pengembalian dana penuh otomatis. Tanda terima mereka tetap dapat diambil dan menunjukkan refunded dengan jumlah neto nol setelah pengembalian dana berhasil. Kesalahan polling/jaringan sementara tidak langsung mengembalikan dana atau membatalkan tugas; pemrosesan diulang.

Kegagalan pengiriman yang dikonfirmasi tidak dikenakan biaya dikembalikan dananya. Hasil pengiriman yang ambigu ditahan untuk rekonsiliasi otomatis (rekonsiliasi asinkron pertama setelah sekitar 20 menit; hasil yang masih tidak diketahui setelah 24 jam dikembalikan dananya selama rekonsiliasi). Jika pengiriman tidak membuat tugas publik, tidak ada tanda terima yang terkait tugas untuk percobaan tersebut. Penawaran bukan reservasi dan tidak memerlukan pelepasan.

Tidak ada endpoint pembatalan Seedance publik. Memutuskan sambungan atau menghentikan polling tidak membatalkan tugas. Pemeriksaan status tugas mencegah polling berulang menerapkan penyelesaian/pengembalian dana penyelesaian yang sama lagi, sementara endpoint tanda terima itu sendiri bersifat hanya-baca. Ini bukan jaminan tepat-satu-kali yang menyeluruh untuk setiap kegagalan infrastruktur; operasi keuangan yang pending tidak boleh diperlakukan sebagai final.