Пакетное создание задач

Создаёт до 30 задач за один запрос. Каждая задача обрабатывается независимо — сбой одной не влияет на остальные. Результат содержит статус каждой задачи и общую сводку.

POST
/tasks/batch

Authorization

AuthorizationRequiredBearer <token>

API ключ для аутентификации. Передавайте в заголовке Authorization: Bearer sk-...

In: header

Request Body

application/jsonRequired
tasksRequiredarray<object>

Массив задач (каждый элемент — тело POST /tasks)

Response Body

Batch создан

successboolean
dataobject

Ошибка валидации запроса. Тело запроса не соответствует схеме или содержит невалидные значения.

Поле errors содержит детализацию по каждому невалидному полю.

successRequiredboolean
errorRequiredobject
errorsarray<object>

Детализация ошибок валидации (при code=VALIDATION_ERROR)

Ошибка аутентификации.

КодПричинаЧто делать
MISSING_API_KEYЗаголовок Authorization отсутствуетДобавьте Authorization: Bearer sk-...
INVALID_AUTH_FORMATНеверный формат заголовкаИспользуйте формат Bearer sk-...
INVALID_API_KEYКлюч не найден в системеПроверьте ключ в личном кабинете
API_KEY_INACTIVEКлюч деактивированАктивируйте ключ в личном кабинете
API_KEY_EXPIREDСрок действия ключа истёкСоздайте новый ключ
successRequiredboolean
errorRequiredobject
errorsarray<object>

Детализация ошибок валидации (при code=VALIDATION_ERROR)

Недостаточно средств на балансе для выполнения операции. Пополните баланс в личном кабинете.

successRequiredboolean
errorRequiredobject
errorsarray<object>

Детализация ошибок валидации (при code=VALIDATION_ERROR)

Превышен лимит запросов для вашего тарифа. Повторите запрос через время, указанное в заголовке Retry-After.

Лимиты зависят от тарифа (см. раздел Тарифы в личном кабинете).

successRequiredboolean
errorRequiredobject
errorsarray<object>

Детализация ошибок валидации (при code=VALIDATION_ERROR)

curl -X POST "/api/v1/tasks/batch" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "tasks": [
      {
        "url": "https://example.com/file1.mp3",
        "webhook_url": "https://example.com/webhook",
        "steps": [
          {
            "name": "fetch",
            "depends_on": []
          },
          {
            "name": "transcode",
            "depends_on": [
              "fetch"
            ]
          },
          {
            "name": "transcribe",
            "depends_on": [
              "transcode"
            ],
            "options": {
              "diarization": true
            }
          },
          {
            "name": "llm",
            "depends_on": [
              "transcribe"
            ]
          }
        ]
      },
      {
        "url": "https://example.com/file2.mp3",
        "webhook_url": "https://example.com/webhook",
        "steps": [
          {
            "name": "fetch",
            "depends_on": []
          },
          {
            "name": "transcode",
            "depends_on": [
              "fetch"
            ]
          },
          {
            "name": "transcribe",
            "depends_on": [
              "transcode"
            ]
          }
        ]
      }
    ]
  }'
const body = JSON.stringify({
  "tasks": [
    {
      "url": "https://example.com/file1.mp3",
      "webhook_url": "https://example.com/webhook",
      "steps": [
        {
          "name": "fetch",
          "depends_on": []
        },
        {
          "name": "transcode",
          "depends_on": [
            "fetch"
          ]
        },
        {
          "name": "transcribe",
          "depends_on": [
            "transcode"
          ],
          "options": {
            "diarization": true
          }
        },
        {
          "name": "llm",
          "depends_on": [
            "transcribe"
          ]
        }
      ]
    },
    {
      "url": "https://example.com/file2.mp3",
      "webhook_url": "https://example.com/webhook",
      "steps": [
        {
          "name": "fetch",
          "depends_on": []
        },
        {
          "name": "transcode",
          "depends_on": [
            "fetch"
          ]
        },
        {
          "name": "transcribe",
          "depends_on": [
            "transcode"
          ]
        }
      ]
    }
  ]
})

fetch("/api/v1/tasks/batch", {
  headers: {
    "Authorization": "Bearer <token>"
  },
  body
})
package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
  "strings"
)

func main() {
  url := "/api/v1/tasks/batch"
  body := strings.NewReader(`{
    "tasks": [
      {
        "url": "https://example.com/file1.mp3",
        "webhook_url": "https://example.com/webhook",
        "steps": [
          {
            "name": "fetch",
            "depends_on": []
          },
          {
            "name": "transcode",
            "depends_on": [
              "fetch"
            ]
          },
          {
            "name": "transcribe",
            "depends_on": [
              "transcode"
            ],
            "options": {
              "diarization": true
            }
          },
          {
            "name": "llm",
            "depends_on": [
              "transcribe"
            ]
          }
        ]
      },
      {
        "url": "https://example.com/file2.mp3",
        "webhook_url": "https://example.com/webhook",
        "steps": [
          {
            "name": "fetch",
            "depends_on": []
          },
          {
            "name": "transcode",
            "depends_on": [
              "fetch"
            ]
          },
          {
            "name": "transcribe",
            "depends_on": [
              "transcode"
            ]
          }
        ]
      }
    ]
  }`)
  req, _ := http.NewRequest("POST", url, body)
  req.Header.Add("Authorization", "Bearer <token>")
  req.Header.Add("Content-Type", "application/json")
  res, _ := http.DefaultClient.Do(req)
  defer res.Body.Close()
  body, _ := ioutil.ReadAll(res.Body)

  fmt.Println(res)
  fmt.Println(string(body))
}
import requests

url = "/api/v1/tasks/batch"
body = {
  "tasks": [
    {
      "url": "https://example.com/file1.mp3",
      "webhook_url": "https://example.com/webhook",
      "steps": [
        {
          "name": "fetch",
          "depends_on": []
        },
        {
          "name": "transcode",
          "depends_on": [
            "fetch"
          ]
        },
        {
          "name": "transcribe",
          "depends_on": [
            "transcode"
          ],
          "options": {
            "diarization": true
          }
        },
        {
          "name": "llm",
          "depends_on": [
            "transcribe"
          ]
        }
      ]
    },
    {
      "url": "https://example.com/file2.mp3",
      "webhook_url": "https://example.com/webhook",
      "steps": [
        {
          "name": "fetch",
          "depends_on": []
        },
        {
          "name": "transcode",
          "depends_on": [
            "fetch"
          ]
        },
        {
          "name": "transcribe",
          "depends_on": [
            "transcode"
          ]
        }
      ]
    }
  ]
}
response = requests.request("POST", url, json = body, headers = {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
})

print(response.text)
{
  "success": true,
  "data": {
    "results": [
      {
        "index": 0,
        "success": true,
        "data": {
          "id": "uuid-1",
          "status": "pending"
        }
      },
      {
        "index": 1,
        "success": true,
        "data": {
          "id": "uuid-2",
          "status": "pending"
        }
      }
    ],
    "summary": {
      "total": 2,
      "succeeded": 2,
      "failed": 0
    }
  }
}

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request body"
  },
  "errors": [
    {
      "field": "url",
      "message": "Укажите url или input"
    }
  ]
}

{
  "success": false,
  "error": {
    "code": "MISSING_API_KEY",
    "message": "API key is required. Pass it in Authorization header: Bearer sk-..."
  }
}

{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "message": "Недостаточно средств на балансе"
  }
}
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Try again in 12 seconds"
  }
}