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}:billingdi 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.
- Bulatkan durasi terukur setiap video referensi ke atas secara independen, lalu jumlahkan:
input_seconds = sum(ceil(each_video_duration)). - Bulatkan durasi keluaran ke detik bilangan bulat terdekat, dengan setengah detik positif dibulatkan ke atas.
- Jumlahkan detik input dan output yang dapat ditagih.
- Kalikan dengan
effective_unit_rate, bagi denganaccount_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.
