שפּרינגען צו אינהאַלט
API גייד

וועבהאָאָקס

ווײַזן ווי Markdown דערהייַנטיקט

אַנשטאָט צו פּאָלן, געבט אַ לויף אַ webhook_url. ווען די בקשה דערגרייכט אַ לעצטן סטאַטוס (succeeded, failed אָדער canceled), שיקן מיר אַן אונטערגעשריבענע POST צו יענער URL.

טערמינאַל
curl -X POST "https://api.doitong.com/v1/run/{model_id}?webhook_url=https://example.com/hooks/doitong" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "..."}'

דער עווענט

כעדערס פֿון דער בקשה
POST /hooks/doitong HTTP/1.1
Content-Type: application/json
User-Agent: Doitong-Webhooks/1
Doitong-Request-Id: req_8k2m4q7x1z9c3v5b6n0p2r4t
Doitong-Signature: t=1760961609,v1=5f1c0d6e2b…
גוף פֿון דער בקשה
{
  "id": "evt_8k2m4q7x1z9c3v5b6n0p2r4t_succeeded",
  "object": "event",
  "type": "request.succeeded",
  "created_at": "2026-10-20T12:00:09Z",
  "data": {
    "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "object": "request",
    "status": "succeeded",
    "outputs": [ { "type": "video", "url": "https://content.doitong.com/dev-api/…/0-output.mp4" } ]
  }
}
  • type איז request.succeeded, request.failed אָדער request.canceled.
  • data איז דער גאַנצער בקשה־אָביעקט, פּונקט דאָס וואָס GET /requests/{id} גיט צוריק.
  • id איז סטאַביל פֿאַר אַ בקשה און איר לעצטן סטאַטוס. ניצט עס צו איגנאָרירן אַ דעליווערי וואָס איר האָט שוין פּראַסעסט.

דעליווערי און ווידער־פּרואוון

ענטפֿערט מיט סיי וועלכן 2xx סטאַטוס אין 10 סעקונדעס. אַלץ אַנדערש (אָדער אַ טיימאַוט) ווערט ווידער געפּרואווט: ביז 6 פּרואוון אין גאַנצן, נאָך 30 סעקונדעס, 2 מינוט, 10 מינוט, 1 שעה און 6 שעה. טוט די פּאַמעלעך אַרבעט נאָך אייער ענטפֿער, נישט פֿריִער.

באַשטעטיקט די סיגנאַטור

יעדער שליסל האָט זײַן אייגענע אונטערשרײַב־סוד. לייענט עס איין מאָל פֿון GET https://api.doitong.com/v1/account (webhook_signing_secret, עס הייבט זיך אָן מיט whsec_) און היט עס בײַם שליסל.

דער Doitong-Signature כעדער איז t=<unix time>,v1=<signature>, וווּ די סיגנאַטור איז דער העקס HMAC-SHA256 פֿון "<t>.<raw request body>" מיט אייער סוד ווי דער שליסל. צו באַשטעטיקן:

  1. נעמט די רויע גוף־בייטן פּונקט ווי זיי זענען אָנגעקומען (איידער סיי וועלכע JSON פּאַרסינג).
  2. רעכנט אויס HMAC-SHA256 פֿון t + "." + body מיט אייער סוד, ווי קליינע העקס־אותיות.
  3. פֿאַרגלייכט עס מיט v1 אין קאַנסטאַנטער צײַט.
  4. פֿאַרוואַרפֿט דעם עווענט ווען t איז מער ווי 5 מינוט ווײַט פֿון אייער זייגער (שוץ קעגן ווידערשפּילן).

א גאַנצער ריסיווער אין Node.js (Express) און Python (Flask):

import crypto from "node:crypto";
import express from "express";

const SECRET = process.env.DOITONG_WEBHOOK_SECRET; // whsec_...
const app = express();

app.post("/hooks/doitong", express.raw({ type: "application/json" }), (req, res) => {
  const header = req.get("Doitong-Signature") || "";
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
  const t = Number(parts.t);
  const expected = crypto.createHmac("sha256", SECRET).update(t + "." + req.body).digest("hex");
  const given = Buffer.from(parts.v1 || "", "utf8");
  const valid =
    given.length === expected.length &&
    crypto.timingSafeEqual(given, Buffer.from(expected, "utf8")) &&
    Math.abs(Date.now() / 1000 - t) < 300;
  if (!valid) return res.status(400).send("bad signature");

  const event = JSON.parse(req.body);
  if (event.type === "request.succeeded") {
    console.log(event.data.id, event.data.outputs.map((o) => o.url));
  }
  res.sendStatus(204);
});

עצות

  • ענטפֿערט שנעל און לייגט אייער אייגענע פּראַסעסינג אין אַ ריי.
  • דער סוד געהערט צום API שליסל וואָס האָט אָנגעהויבן דעם לויף. שליסלען אין פאַרשידענע סערוויסן האָבן פאַרשידענע סודות.