---
title: "Create a job (generic)"
method: POST
path: "/jobs"
tags: ["Jobs"]
---

# Create a job (generic)

`POST /jobs`

Create a new media processing job. Specify the job type, input files, and processing parameters. Use GET /jobs/types to discover available types.

## Request body

- object
  - `type` string, required — Job type identifier (e.g., watermark.apply, transcode)
  - `inputs` object — Input files (e.g., { source: 'https://...' })
  - `params` object — Job-specific parameters (validated per job type)
  - `forceAsync` boolean — Force async dispatch even for sync-eligible job types
  - `idempotencyKey` string — Idempotency key to prevent duplicate job creation
  - `callback` object — Per-job completion callback. On complete/failed/cancelled Rendobar POSTs the standard job envelope to this URL.
    - `url` string, uri, required — HTTPS URL Rendobar POSTs the job result to on a terminal state
    - `headers` object — Custom request headers (e.g. an Authorization bearer) sent with the callback POST. Lets it hit an authed target like Cloudflare's Workflows events endpoint directly. Framing and X-Rendobar-* headers are reserved.
    - `verify` boolean — Opt into signing: when true, the callback POST carries an X-Rendobar-Signature (HMAC-SHA256, same scheme as webhooks). Verify it with your org callback signing secret (GET /orgs/current/callback-secret) via the SDK's verifyWebhook(). Default false leaves the callback unsigned.
    - `events` string[] — Opt into EXTRA non-terminal events. The terminal events (complete/failed/cancelled) always fire and cannot be filtered out, so a waiter can never hang. Today the only opt-in extra is job.started (a progress ping fired when the job starts running).

## Response `200`

Job completed synchronously or duplicate (idempotent)

- object
  - `id` string, required — Job ID
  - `status` 'complete', required — Completed synchronously
  - `url` string — Data URL of the result

## Other responses

- `201` — Job created and dispatched successfully
- `400` — Validation error
- `401` — Unauthorized
- `402` — Insufficient credits
- `403` — Forbidden — job type not allowed on plan
- `429` — Rate limited

## Changes

- **2026-08-29** `4d10ec4266ee` — 1 info
  - api operation id `submitJob` was added
- **2026-07-26** `ad4351c79853` — 1 info
  - added the new optional request property `callback`

[Change history](https://skmtc.dev/rendobar/apis/rendobar-api/changes/jobs/post.md)

---

[API](https://skmtc.dev/rendobar/apis/rendobar-api.md) · [All operations](https://skmtc.dev/rendobar/apis/rendobar-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rendobar/rendobar-api/revisions/4d10ec4266ee/schema)
