APIMaster.ai

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}: billing auf 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.

  1. Runden Sie die gemessene Dauer jedes Eingabevideos einzeln auf und summieren Sie dann: input_seconds = sum(ceil(each_video_duration)).
  2. Runden Sie die Ausgabedauer auf die nächste ganze Sekunde, wobei positive halbe Sekunden aufgerundet werden.
  3. Addieren Sie die abrechnungsfähigen Eingabe- und Ausgabesekunden.
  4. Multiplizieren Sie mit effective_unit_rate, teilen Sie durch account_unit_usd und 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.

Seedance: Idempotenz und Wiederherstellung