Seedance-Angebote und Abrechnungsbelege
Schätzen Sie die Seedance-Generierungskosten und überprüfen Sie die endgültige Abbuchung mit authentifizierten, dauerhaften Abrechnungsbelegen.
Seedance-Angebote und Abrechnungsbelege
Gilt für seedance-2.0, seedance-2.5, seedance-2.0-fast und seedance-2.0-mini über alle Generierungskanäle. Basis-URL: https://apimaster.ai/v1 (https://apimaster.ai/v1). Authentifizieren Sie alle Anfragen mit Authorization: Bearer YOUR_API_KEY.
Angebot einholen
POST https://apimaster.ai/v1/videos/quote akzeptiert dieselben JSON-Parameter wie eine Standard-Videogenerierungsanfrage, einschließlich model, prompt, duration, resolution, video_urls und anderer unterstützter Generierungseinstellungen. Entwurfsgenerierung, Entwurfs-Upgrades und Remix-Angebote werden derzeit nicht unterstützt.
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}'
Die Antwort enthält object: "video.quote", quote_id, expires_at (Unix-Sekunden), binding: false, funds_reserved: false und ein unten beschriebenes billing-Objekt. Das Angebot hat eine empfohlenes/beratendes Gültigkeitszeitraum von fünf Minuten. Es bucht keine Mittel ab, erstellt keine Aufgabe und startet keine Provider-Generierung. billing.reserved_amount ist daher "0.000000". Die Angebots-ID ist nur informativ; sie ist kein Autorisierungs- oder Preissperren-Token und muss nicht mit der Generierung übermittelt werden.
Der Preis wird bei der tatsächlichen Übermittlung neu berechnet und für diese Aufgabe eingefroren. Eine Schätzung ist keine Garantie für die maximale Belastung. Die abgeschlossene Aufgabe kann mehr oder weniger kosten als die Schätzung. Anfragen mit automatischer Dauer verwenden eine Schätzung von 30 Sekunden Ausgabe; requested_output_seconds ist -1.
Die Generierung unterliegt weiterhin der Provider-Validierung. Für Video-Verlängerungsanfragen mit Seedance 2.5 setzen Sie explizit aspect_ratio: "adaptive"; eine Provider-Ablehnung wird über den normalen Rückerstattungsablauf behandelt.
Beleg der Aufgabe abrufen
curl "https://apimaster.ai/v1/videos/task_xxx/billing" \
-H "Authorization: Bearer YOUR_API_KEY"
GET /v1/videos/{task_id}/billing gibt object: "video.billing_receipt" und billing zurück. Nur API-Schlüssel, die zum Konto des Aufgabeninhabers gehören, können ihn abrufen. Unbekannte, fremde und historische Aufgaben ohne Beleg geben HTTP 404 zurück. Belege werden für neue Aufgaben erstellt, nachdem dieses Feature aktiviert wurde; ältere Aufgabene werden nicht rückwirkend rekonstruiert.
Dasselbe billing-Objekt ist in beiden Abfrageantworten für Aufgaben enthalten:
GET /v1/videos/{task_id}:billingauf oberster Ebene.GET /v1/video/generations/{task_id}:data.billing.
settlement_status ist pending, settled oder refunded; Angebotsantworten verwenden estimate. Aufgabenerfüllung und finanzielle Abwicklung sind getrennt: Beträge gelten nur als endgültig, wenn der Beleg settled oder refunded lautet. Wiederholte Beleganfragen lösen keine Generierung, Abwicklung oder Rückerstattungen aus. Endgültige Belege behalten dieselbe Beleg-ID und denselben Inhalt, auch nach einer Rückerstattung.
Vollständige Anfrage- und Antwortbeispiele
Beide Beispiele verwenden Seedance 2.0 mit 480P, eine angeforderte 4-Sekunden-Ausgabe, eine Referenz mit gemessenen 4,042 Sekunden, Kanalmultiplikator 1 und Kontomultiplikator 1,05. Abschlussdauern und Beträge stammen aus einem Live-Test; das Angebot ist ein veranschaulichendes Beispiel, das für passende Eingaben zusammengestellt wurde. IDs und Medien-URLs sind Platzhalter. Die tatsächlichen Sätze stammen aus Ihrer API-Antwort.
1. Angebot einholen
POST https://apimaster.ai/v1/videos/quote, Anfrage-JSON:
{
"model": "seedance-2.0",
"prompt": "A paper boat moves gently on a pond.",
"duration": 4,
"resolution": "480p",
"video_urls": [
"https://example.com/reference.mp4"
]
}
| Feld | Typ | Bedeutung |
|---|---|---|
model |
string | Modell-ID, hier seedance-2.0. |
prompt |
string | Generierungs-Prompt. |
duration |
integer | Angeforderte Ausgabesekunden, nicht die Dauer des Referenzvideos. |
resolution |
string | Ausgabearlösung, hier 480p. |
video_urls |
array |
URLs der Referenzvideos. Ersetzen Sie den Platzhalter durch zugängliche Medien; der Server misst jede Datei. |
Angebotsantwort:
{
"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
}
}
Die Eingabe von 4,042 Sekunden wird auf 5 Sekunden aufgerundet. Mit 4 geschätzten Ausgabesekunden umfasst die Schätzung 9 Sekunden und kostet 0,408146 USD. Das Anbieten bucht keine Mittel ab; die endgültigen Beträge bleiben null.
2. Generierung übermitteln und Abschluss abfragen
Nach der Übermittlung an POST https://apimaster.ai/v1/videos/generations enthält die erste Antwort die Aufgaben-ID:
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_example"
}
]
}
Fragen Sie dann GET https://apimaster.ai/v1/videos/task_example mit einem API-Schlüssel desselben Kontos ab. Nach Abschluss von Generierung und Abwicklung:
{
"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
}
}
Die anfängliche Abbuchung entspricht hier den endgültigen Kosten, ohne zusätzliche Abbuchung oder Rückerstattung. billing.output.actual_seconds ist die Ausgabedauer; actual_time ist die Verarbeitungszeit. usage.completion_tokens bestimmt die Belastung nicht. Optionale Felder können je nach Kanal variieren.
GET https://apimaster.ai/v1/videos/task_example/billing gibt { "object": "video.billing_receipt", "billing": ... } mit demselben Billing-Objekt zurück. Die Kompatibilitätsabfrage GET https://apimaster.ai/v1/video/generations/task_example platziert es unter data.billing.
Felder der äußeren Antwort
| Feld | Typ | Bedeutung |
|---|---|---|
object |
string | Antworttyp: video.quote, video oder video.billing_receipt. |
quote_id |
string | Informativer Angebotsbezeichner; keine Preissperre und keine Generierungsautorisierung. |
expires_at |
integer | Empfohlene Angebotsablaufzeit in Unix-Sekunden, normalerweise Erstellung plus 300 Sekunden. |
binding |
boolean | Derzeit false; das Angebot garantiert keinen endgültigen Betrag. |
funds_reserved |
boolean | Derzeit false; das Anbieten bucht oder reserviert keine Mittel. |
billing |
object | Abrechnungsdetails, die unten einzeln dokumentiert sind. |
code |
integer | Antwortcode der Übermittlung; 200 bedeutet übermittelt, nicht abgeschlossen. |
data |
array | Liste der übermittelten Aufgaben; die Kompatibilitätsabfrage verwendet stattdessen ein Objekt für data. |
data[].status |
string | Übermittlungsstatus, in diesem Beispiel submitted. |
data[].task_id |
string | Öffentlicher Aufgabenbezeichner für nachfolgende Abfragen. |
id |
string | Öffentliche Aufgaben-ID in der Abschlussabfrage. |
task_id |
string | Aufgabenbezeichner, in diesem Beispiel gleich id. |
model |
string | Öffentlicher Name des Generierungsmodells. |
status |
string | Aufgabenstatus; completed bedeutet, dass die Generierung abgeschlossen ist. Prüfen Sie billing.settlement_status auf die endgültige Abwicklung. |
progress |
number | Fortschrittsprozent; in diesem Beispiel 100 bei Abschluss. |
actual_time |
number | Verarbeitungssekunden der Aufgabe, nicht die Dauer des Ausgabevideos. |
created_at |
integer | Erstellungszeitstempel der Aufgabe in Unix-Sekunden. |
completed_at |
integer | Abschlusszeitstempel der Aufgabe in Unix-Sekunden. |
metadata |
object | Metadaten des Generierungsergebnisses. |
metadata.url |
string | Download-URL des Videoinhalts. |
usage |
object | Nutzungsinformationen des Providers; je nach Kanal möglicherweise nicht vorhanden. |
usage.completion_tokens |
integer | Token-Anzahl des Providers; wird für die Abrechnung pro Sekunde dieser vier Modelle nicht verwendet. |
Abrechnungsschema
Alle Geldbeträge und Einheitssätze sind Dezimalzeichenketten. Zeiträume sind Sekunden. Optionale Felder sind JSON null, bis sie verfügbar sind.
| Feld | Typ | Bedeutung |
|---|---|---|
schema_version |
string | Version des Abrechnungsschemas, in diesem Beispiel "1". |
receipt_id |
string | Stabiler Belegbezeichner; in Angeboten nicht vorhanden. |
task_id |
string | Öffentliche Aufgaben-ID, die mit dem Beleg verknüpft ist; in Angeboten nicht vorhanden. |
settlement_status |
string | estimate, pending, settled, refunded |
model |
string | Angewandte öffentliche Modell-ID. |
resolution |
string | Normalisierte Auflösung, die für die Abrechnung verwendet wird. |
tariff_variant |
string | Tarifstufe; -input weist auf Video-Referenzen hin, wobei dieser Satz für Ein- und Ausgabe gilt. |
tariff_revision |
string | Fingerabdruck des Modells, der Tarifstufe, des konfigurierten Grundsatzes und der Abrechnungsregelversion |
currency |
string | Währung der Belastung, derzeit USD. |
unit |
string | Einheit des Satzes; second bedeutet pro Sekunde. |
base_unit_rate |
decimal string | Konfigurierter Grundpreis pro Sekunde für dieses Modell und diese Stufe. |
channel_multiplier |
number | Angewandter aggregierter Kanalpreis-Multiplikator. |
account_multiplier |
number | Angewandter Konto-/Gruppenmultiplikator, in diesem Beispiel 1,05. |
effective_unit_rate |
decimal string | Angewandter Satz pro Sekunde, bei der Übermittlung eingefroren und auf 12 Dezimalstellen gerundet. |
requested_output_seconds |
integer | Angeforderte Ausgabedauer; -1 bei automatischer Dauer |
estimated_output_seconds |
integer | Geschätzte Ausgabesekunden; bei automatischer Dauer wird mit 30 Sekunden geschätzt. |
estimated_billable_seconds |
integer | Anfängliche geschätzte Gesamtabrechnungssekunden, einschließlich Referenzvideos und geschätzter Ausgabe. |
input_videos |
array | Servermessungen pro Referenz, in der Reihenfolge der Anfrage |
input_videos[].index |
integer | Position des Referenzvideos in der Anfrage, beginnend bei null. |
input_videos[].media_id |
string | Konto-lokaler Medien-Hash oder besitzene Asset-ID; keine Referenzvideo-URL wird zurückgegeben. |
input_videos[].measured_seconds |
number or null | Servergemessene Dauer vor dem Runden; kann bei älteren zwischengespeicherten Assets null sein |
input_videos[].billable_seconds |
integer | Aufgerundete abrechnungsfähige Dauer dieser Referenz |
input_videos[].duration_source |
string | apimaster_probe oder apimaster_asset_cache |
billable_input_video_seconds |
integer | Summe der abrechnungsfähigen Sekunden pro Referenz |
output |
object or null | Endgültige Ausgabedauer-Informationen, verfügbar nach erfolgreicher Abwicklung |
output.actual_seconds |
number or null | Tatsächlich gemeldete/geprüfte Ausgabedauer; null, wenn nicht verfügbar |
output.billable_seconds |
integer | Tatsächlich in der Abwicklung verwendete Ausgabesekunden |
output.duration_source |
string | provider_reported, apimaster_probe, provider_billable_seconds, requested_duration_fallback oder reservation_fallback |
billable_seconds |
integer or null | Endgültige kombinierte abrechnungsfähige Ein-/Ausgabesekunden |
rounding |
object | Rundungsregeln für Ein-/Ausgabe und Geld sowie Betragsformel |
estimated_amount |
decimal string | Anfängliche geschätzte Kosten, kein endgültiger Betrag und keine Garantie für die maximale Belastung. |
reserved_amount |
decimal string | Anfängliche Kontobelastung bei der Übermittlung, bei Angeboten null; keine Bankautorisierungsreservierung. |
additional_debit_amount |
decimal string | Zusätzliche Abbuchung, wenn die endgültigen Kosten die anfängliche Abbuchung überschreiten. |
final_debit_amount |
decimal string or null | Endgültige Nettokosten der Aufgabe nach Anpassungen; null nach vollständiger Rückerstattung |
net_amount |
decimal string or null | Endgültige Nettokosten der Aufgabe nach Anpassungen; null nach vollständiger Rückerstattung |
refunded_amount |
decimal string | Aus der anfänglichen Abbuchung zurückgegebener Betrag; bei vollständiger Rückerstattung gleich der anfänglichen Abbuchung. |
initial_quota_units |
integer | Genaue Konto-Einheiten, die anfänglich belastet wurden; bei Angeboten null. |
final_quota_units |
integer or null | Genaue Konto-Einheiten der endgültigen Nettokosten; null solange pending, null nach vollständiger Rückerstattung. |
account_unit_usd |
decimal string | "0.000002" pro Konto-Einheit |
media_charges |
object | image, audio, other_reference sind unter dem aktuellen Tarif null; input_video_unrounded und output_video_unrounded trennen die Videokomponenten vor der endgültigen monetären Rundung |
final_debit_may_exceed_estimate |
boolean | true; die Schätzung ist keine harte Ausgabenobergrenze |
created_at |
integer | Erstellungszeitstempel der Abrechnungsdetails in Unix-Sekunden. |
settled_at |
integer or null | Zeitstempel der endgültigen Abwicklung oder Rückerstattung in Unix-Sekunden; null, bis abgeschlossen. |
| Feld | Typ | Bedeutung |
|---|---|---|
rounding.input_video |
string | ceil_each_file_then_sum: Jede Eingabedatei einzeln aufrunden, dann summieren. |
rounding.output_video |
string | nearest_integer_half_up: Nächstgelegene Ausgabesekunde, halbe Sekunden werden aufgerundet. |
rounding.effective_unit_rate |
string | nearest_decimal_12_places_half_up: Den effektiven Satz auf 12 Dezimalstellen runden. |
rounding.money |
string | nearest_account_unit_half_up: Den kombinierten Betrag auf Konto-Einheiten runden. |
rounding.amount_formula |
string | Formel für den endgültigen kombinierten Betrag; Ein- und Ausgabebeträge werden nicht getrennt gerundet. |
media_charges.input_video_unrounded |
decimal string | Videoringabe-Komponente vor der monetären Rundung. |
media_charges.output_video_unrounded |
decimal string | Videoausgabe-Komponente vor der monetären Rundung. |
media_charges.image |
decimal string | Separate Bildpauschale, derzeit null. |
media_charges.audio |
decimal string | Separate Audiopauschale, derzeit null. |
media_charges.other_reference |
decimal string | Pauschale für andere Referenzen, derzeit null. |
Endgültige Kosten neu berechnen
Bei Referenzvideos gilt die Tarifstufe für Videoeingabe sowohl für die Ausgabe- als auch für die Referenzvideosekunden. Bilder und Audio haben unter dem aktuellen Seedance-Tarif keine separate Zuschlag. Token-Zahlen und Provider-Kosten sind keine Abrechnungseingaben.
- Runden Sie die gemessene Dauer jedes Eingabevideos einzeln auf und summieren Sie dann:
input_seconds = sum(ceil(each_video_duration)). - Runden Sie die Ausgabedauer auf die nächste ganze Sekunde, wobei positive halbe Sekunden aufgerundet werden.
- Addieren Sie die abrechnungsfähigen Eingabe- und Ausgabesekunden.
- Multiplizieren Sie mit
effective_unit_rate, teilen Sie durchaccount_unit_usdund runden Sie den Gesamtbetrag einmal auf die nächste ganze Konto-Einheit, wobei positive halbe Einheiten aufgerundet werden.
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
Verwenden Sie Dezimalarithmetik. Runden Sie die monetären Komponenten für Ein- und Ausgabe nicht getrennt. Zum Beispiel hat eine 4-Sekunden-Aufgabe mit Seedance 2.0 bei 480P ohne Referenzvideo mit dem Grundsatz 0.07031, Kanalmultiplikator 1 und Kontomultiplikator 1.05 einen effektiven Satz von 0.0738255 und Nettokosten von 0.295302 USD (147651 Konto-Einheiten).
APIMaster misst die Dauer von Referenzvideos, anstatt Client-Felder wie input_seconds oder reference_seconds zu vertrauen. Die angeforderte duration/seconds steuert die Ausgabedauer. Bei Ausgaben bevorzugt die Abwicklung die providerberichtete Dauer und prüft die Ausgabe bei Bedarf; nicht verfügbare Messungen können auf provider-abrechnungsfähige Sekunden oder die angeforderte/reservierte Dauer zurückfallen. Der Beleg kennzeichnet die Quelle ausdrücklich. Ein Rückgriff wird nie als unabhängig gemessene tatsächliche Dauer gekennzeichnet. Bestehende zwischengespeicherte Assets oder geerbte ältere Entwürfe können unvollständige Messdetails pro Datei aufweisen.
actual_time in der Videoantwort ist die Verarbeitungszeit der Aufgabe, nicht die Dauer des Ausgabevideos. usage.completion_tokens, sofern vorhanden, ist nur informativ.
Fehler und Rückerstattungen
Provider-Aufgabenausfälle und der konfigurierte 24-Stunden-Timeout für unfertige Aufgaben lösen eine automatische vollständige Rückerstattung aus. Ihre Belege bleiben abrufbar und zeigen refunded mit null Netto-Betrag, sobald die Rückerstattung erfolgreich ist. Temporäre Polling-/Netzwerkfehler erstatten oder stornieren eine Aufgabe nicht sofort; die Verarbeitung wird wiederholt.
Eine Übermittlungsfeststellung, die als nicht belastet bestätigt wird, wird erstattet. Ein mehrdeutiges Übermittlungsergebnis wird zur automatischen Abstimmung zurückbehalten (erste asynchrone Abstimmung nach etwa 20 Minuten; noch unbekannte Ergebnisse werden nach 24 Stunden während der Abstimmung erstattet). Wenn die Übermittlung keine öffentliche Aufgabe erstellt hat, gibt es für diesen Versuch keinen aufgabenbezogenen Beleg. Ein Angebot ist keine Reservierung und muss nicht freigegeben werden.
Es gibt keinen öffentlichen Seedance-Stornierungsendpunkt. Das Trennen der Verbindung oder das Beenden des Pollings storniert eine Aufgabe nicht. Aufgabenstatusprüfungen verhindern, dass wiederholtes Polling dieselbe Abschlussabwicklung/-rückerstattung erneut anwendet, während der Beleg-Endpunkt selbst schreibgeschützt ist. Dies ist keine pauschale Exactly-once-Garantie für jeden Infrastrukturausfall; ausstehende finanzielle Vorgänge dürfen nicht als abgeschlossen behandelt werden.
