Portal de clientes · Pagamentos e geração indisponíveis

VEYRA / DEVELOPERS

Uma API. O seu próximo produto.

Prepare integrações sobre um contrato comercial versionado, independente do Production Engine. Comece no sandbox sem custos de inferência.

OpenAPI 3.1 · v1.6.1

Contract-first. Sandbox-first.

Este incremento implementa sessões demo locais, catálogo, quotes, jobs, históricos paginados de projetos/créditos, cancelamento, usage e limites de fila. Bearer opcional com memberships locais e scopes por operação. OAuth2 Client Credentials, quotas distribuídas, webhooks e downloads assinados ainda não estão disponíveis.

Consultar contrato JSON ↗

FLUXO DE INTEGRAÇÃO

  1. Descobrir serviços e capacidades simuladas
  2. Obter uma quote com teto de créditos
  3. Aprovar e submeter com Idempotency-Key
  4. Consultar ou cancelar o job

Sandbox exclusivo de desenvolvimento. Não envie dados pessoais ou segredos. Sessão demo por cookie ou bearer configurado pelo operador; não emite credenciais OAuth2.

Contrato público, Engine privado.

Todas as rotas exigem autenticação. Escritas com sessão demo verificam a origem. Bearer exige X-Veyra-Tenant, scope da operação e membership ativa. Os jobs não progridem para produção e não geram assets.

O sandbox permite até 20 jobs na fila por workspace e 10 por serviço. Consulte os limites antes de submeter. Um limite atingido devolve 409; cancelar um job liberta capacidade. Repetir a mesma submissão com a mesma chave não cria outro job.

Os pedidos autenticados têm limites separados: 120 por workspace e 60 por identidade em janelas fixas de 60 segundos. Uma resposta 429 inclui Retry-After. Aguarde e repita manualmente, preservando a chave de submissão. Pedidos inválidos também contam após autorização.

Referência da API

OpenAPI 3.1 · v1.6.1

Explore operações, permissões e modelos do contrato atual. Esta referência permite consultar o contrato sem enviar pedidos. Use os SDKs no seu servidor para integrar o sandbox.

12 de 12 operações

GET /api/v1/services

listServices

Permissão bearer: catalog:read

Parâmetros de GET /api/v1/services
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Services"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
POST /api/v1/quotes

createQuote

Permissão bearer: quotes:write

Parâmetros de POST /api/v1/quotes
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}
Corpo do pedido
{
  "required": true,
  "description": "Authenticated request bodies are limited to16000 UTF8 bytes and a5000ms total read deadline. Overflow returns413; an incomplete body past the deadline returns408 before domain writes.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/QuoteInput"
      }
    }
  }
}

Respostas

201 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Quote"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/jobs

listJobs

Legacy bare array of the newest20 jobs only, ordered by createdAt DESC,id DESC. Use /jobs/page to traverse history.

Permissão bearer: jobs:read

Parâmetros de GET /api/v1/jobs
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Jobs"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
POST /api/v1/jobs

submitJob

Permissão bearer: jobs:write

Parâmetros de POST /api/v1/jobs
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}
Idempotency-KeyheaderSim
{
  "type": "string",
  "pattern": "^[a-zA-Z0-9_-]{1,128}$"
}
Corpo do pedido
{
  "required": true,
  "description": "Authenticated request bodies are limited to16000 UTF8 bytes and a5000ms total read deadline. Overflow returns413; an incomplete body past the deadline returns408 before domain writes.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/SubmitInput"
      }
    }
  }
}

Respostas

202 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Job"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/jobs/{id}

getJob

Permissão bearer: jobs:read

Parâmetros de GET /api/v1/jobs/{id}
NomeLocalObrigatórioDescrição e schema
idpathSim
{
  "type": "string",
  "format": "uuid"
}
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Job"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
POST /api/v1/jobs/{id}/cancel

cancelJob

Permissão bearer: jobs:write

Parâmetros de POST /api/v1/jobs/{id}/cancel
NomeLocalObrigatórioDescrição e schema
idpathSim
{
  "type": "string",
  "format": "uuid"
}
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Job"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/usage

getUsage

Permissão bearer: credits:read

Parâmetros de GET /api/v1/usage
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Usage"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/assets

listAssets

Permissão bearer: jobs:read

Parâmetros de GET /api/v1/assets
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Assets"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/jobs/page

listJobPage

Tenant-private history, newest createdAt then UUID first. Cursor is the last returned job UUID; missing/foreign cursors return404. Concurrent inserts do not shift the older-page boundary; this is not a frozen snapshot. Unknown or repeated query parameters return400.

Permissão bearer: jobs:read

Parâmetros de GET /api/v1/jobs/page
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}
limitqueryNãoCanonical positive decimal1–50; no signs, leading zeros, decimals or empty value.
{
  "type": "integer",
  "minimum": 1,
  "maximum": 50,
  "default": 20
}
beforequeryNãoAn existing job UUID owned by the authenticated tenant.
{
  "type": "string",
  "format": "uuid"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/JobPage"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/credit-entries/page

listCreditEntryPage

Tenant-private demo credit movements, newest append first even if timestamps regress. Cursor identifies an owned movement by kind/job UUID, never a global storage sequence. Missing/foreign cursors return404; malformed/unknown/repeated query fields return400.

Permissão bearer: credits:read

Parâmetros de GET /api/v1/credit-entries/page
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}
limitqueryNãoCanonical positive decimal1–50; no signs, leading zeros, decimals or empty value.
{
  "type": "integer",
  "minimum": 1,
  "maximum": 50,
  "default": 20
}
beforequeryNãoReuse nextCursor: grant, reserve_<uuid> or release_<uuid>. Always resolved in the authenticated tenant.
{
  "allOf": [
    {
      "type": "string",
      "maxLength": 44
    },
    {
      "anyOf": [
        {
          "type": "string",
          "const": "grant"
        },
        {
          "type": "string",
          "pattern": "^(reserve|release)_([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        }
      ]
    }
  ]
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/CreditPage"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/limits

getJobLimits

Permissão bearer: jobs:read

Parâmetros de GET /api/v1/limits
NomeLocalObrigatórioDescrição e schema
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/JobLimits"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
GET /api/v1/jobs/{id}/production

getProductionStatus

Permissão bearer: jobs:read

Parâmetros de GET /api/v1/jobs/{id}/production
NomeLocalObrigatórioDescrição e schema
idpathSim
{
  "type": "string",
  "format": "uuid"
}
X-Veyra-TenantheaderNãoRequired with sandbox Bearer authentication; ignored for demo cookies. Membership must authorize the selected tenant.
{
  "type": "string",
  "minLength": 1,
  "maxLength": 128,
  "pattern": "^[-A-Za-z0-9_]+$"
}

Respostas

200 · Sandbox response
{
  "description": "Sandbox response",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/ProductionStatus"
      }
    }
  }
}
400 · Invalid request
{
  "description": "Invalid request",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
401 · Authentication required
{
  "description": "Authentication required",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
403 · Access denied
{
  "description": "Access denied",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
404 · Not found
{
  "description": "Not found",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
408 · Request body deadline exceeded
{
  "description": "Request body deadline exceeded",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
409 · Conflict
{
  "description": "Conflict",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
413 · Request body too large
{
  "description": "Request body too large",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
429 · Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.
{
  "description": "Authenticated request rate limit reached. No body/domain operation is performed. Retry explicitly with the same quote/key after the indicated delay.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  },
  "headers": {
    "Retry-After": {
      "required": true,
      "description": "Positive delay in seconds for the exhausted fixed windows.",
      "schema": {
        "type": "string",
        "pattern": "^[1-9][0-9]*$"
      }
    }
  }
}
503 · Sandbox, identity or request admission unavailable.
{
  "description": "Sandbox, identity or request admission unavailable.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}

Modelos de dados

As referências #/components/schemas/ apontam para os modelos abaixo.

{
  "type": "array",
  "maxItems": 0,
  "items": {
    "type": "object"
  },
  "description": "No output is fabricated. Sandbox jobs do not render assets."
}

Clientes TypeScript e Python para servidor.

O workspace inclui @veyra/sdk e um cliente Python assíncrono para integrar o sandbox com tokens obtidos pelo seu servidor. Valida respostas pelo contrato, exige uma chave explícita na submissão e permite consultar limites antes de criar jobs. A configuração de identidade e as permissões do tenant continuam a ser necessárias.

Disponíveis neste monorepo; sem publicação npm ou PyPI nesta versão. Mantenha as credenciais exclusivamente no servidor.