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

FieldTypeRequiredDescriptionConstraints
job_idstringyes
  • pattern ^job_[0-9A-HJKMNP-TV-Z]{26}$
servicestringyesThe Tools satellite that runs the job (img, audio, docs…).
  • pattern ^[a-z][a-z0-9-]{1,39}$
typestringyesJob type, e.g. img.process.
  • pattern ^[a-z][a-z0-9]*\.[a-z0-9_.]+$
  • maxLength 80
type_versionintegeryes
  • minimum 1
stateconstyes
  • = "queued"
ownerone ofyesWho submitted the job: a user (user:usr_…), a service, app or mod principal. null for an anonymous browser session; the session is never published.
attemptsintegeryes
  • minimum 0
max_attemptsintegeryes
  • minimum 1
created_atstringyes
  • format date-time
retry_ofstring | nullyesThe failed job this one retries (POST /api/v1/jobs/:id/retry).
  • pattern ^job_[0-9A-HJKMNP-TV-Z]{26}$

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 }] }