ToolsJobCreatedPayload tools.job.created@1
Generated at from
openvibe-contracts v0.33.0 and
openvibe-sdk v0.5.0.
- Version
- 1.0.0
- Owner
- tools
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/events/payloads/tools.job.created.v1.json
tools.job.created v1 (OpenVibe.Tools apps/_shared/jobs/events.js). A job was accepted and queued (POST /api/v1/jobs, or a retry of a failed job, which carries retry_of). An Idempotency-Key replay creates no job and no event. Emitted in the transaction that records the transition, beside the job's own SSE event. Carries ids, type, owner, state, times and result locations; never the job's input, its files, its output data or a session. Jobs of sandbox app tokens are not announced. Envelope: subject { type: job, id: <job_id> }, visibility internal, priority low, actor the owner when it is a subject (user, service, app or mod), else service:tools.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
job_id | string | yes |
| |
service | string | yes | The Tools satellite that runs the job (img, audio, docs…). |
|
type | string | yes | Job type, e.g. img.process. |
|
type_version | integer | yes |
| |
state | const | yes |
| |
owner | one of | yes | Who submitted the job: a user (user:usr_…), a service, app or mod principal. null for an anonymous browser session; the session is never published. | |
attempts | integer | yes |
| |
max_attempts | integer | yes |
| |
created_at | string | yes |
| |
retry_of | string | null | yes | The failed job this one retries (POST /api/v1/jobs/:id/retry). |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: anonymous-retry
{
"job_id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"service": "img",
"type": "img.process",
"type_version": 1,
"state": "queued",
"owner": null,
"attempts": 0,
"max_attempts": 3,
"created_at": "2026-09-23T09:05:00.000Z",
"retry_of": "job_01JAB2C3D4E5F6G7H8J9K0MNPZ"
}Valid: user
{
"job_id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"service": "img",
"type": "img.process",
"type_version": 1,
"state": "queued",
"owner": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"attempts": 0,
"max_attempts": 3,
"created_at": "2026-09-23T09:00:00.000Z",
"retry_of": null
}Rejected: carries-input
{
"job_id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"service": "img",
"type": "img.process",
"type_version": 1,
"state": "queued",
"owner": {
"type": "service",
"id": "community"
},
"attempts": 0,
"max_attempts": 3,
"created_at": "2026-09-23T09:00:00.000Z",
"retry_of": null,
"input": {
"format": "webp",
"width": 640
}
}Rejected: session-owner
{
"job_id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"service": "img",
"type": "img.process",
"type_version": 1,
"state": "queued",
"owner": "session:3f2a9c",
"attempts": 0,
"max_attempts": 3,
"created_at": "2026-09-23T09:00:00.000Z",
"retry_of": null
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('tools.job.created@1', value); // { valid, errors: [{ path, message }] }