generated: '2026-10-09' method: derived generator: derive-data-model.py source: - openapi/spicyapi-openapi.yml notation: has_one = property $ref; has_many = array of $ref; belongs_to = _id field summary: entities: 65 entities_in_spec: 65 relationships: 33 entities: - name: APIKeyTaskItem fields: 9 - name: APIKeyTaskListEnvelope fields: 0 - name: APIKeyTaskListResponse fields: 3 - name: APIKeyUsageEnvelope fields: 0 - name: APIKeyUsageResponse fields: 7 - name: APIModel fields: 24 - name: APIModelExample fields: 3 - name: APIModelList fields: 2 - name: APIModelPrice fields: 9 - name: AnthropicErrorBody fields: 2 - name: AnthropicMessage fields: 8 - name: AnthropicMessageRequest fields: 11 - name: Balance fields: 4 - name: BalanceEnvelope fields: 0 - name: ChatCompletion fields: 6 - name: ChatCompletionRequest fields: 14 - name: CreateTaskEnvelope fields: 0 - name: CreateTaskRequest fields: 5 - name: CreateTaskResponse fields: 4 - name: CreditFacilityItem fields: 8 - name: DownloadURLEnvelope fields: 0 - name: DownloadURLRequest fields: 2 - name: DownloadURLResponse fields: 3 - name: EnvelopeBase fields: 3 - name: ErrorEnvelope fields: 0 - name: FileCommitEnvelope fields: 0 - name: FileCommitResponse fields: 10 - name: FundingGrantItem fields: 12 - name: FundingOverview fields: 8 - name: GeminiErrorBody fields: 1 - name: GeminiGenerateContentRequest fields: 5 description: Google Gemini `generateContent` request. Which generation parameters a model accepts comes from that model's `inputSchema` in `/v1/models` and the catalog. Sampling parameters the model does not decla - name: GeminiGenerateContentResponse fields: 4 - name: LegacyWebhookPayload fields: 8 description: Version 1 compatibility callback. New integrations must use version 2. - name: ModelEnvelope fields: 0 - name: ModelListEnvelope fields: 0 - name: OpenAIErrorBody fields: 1 - name: OpenAIModelList fields: 2 - name: PublicCatalogEnvelope fields: 0 - name: PublicCatalogItem fields: 17 description: Evaluation view of one endpoint. Additional presentation fields are returned and documented in console-openapi.yaml. - name: PublicCatalogList fields: 3 - name: PublicCatalogPrice fields: 11 - name: ResponseObject fields: 9 - name: ResponsesRequest fields: 11 - name: RetryTaskEnvelope fields: 0 - name: RetryTaskResponse fields: 0 - name: TaskActionRequest fields: 1 - name: TaskOutput fields: 3 description: First-party result metadata. Ready assets include directly usable temporary URLs; no download-ticket request is needed. Poll again to refresh an expired URL. Temporary URLs are bearer access grants; n - name: TaskOutputAsset fields: 13 - name: TaskPurgeEnvelope fields: 0 - name: TaskPurgeResponse fields: 6 - name: TaskQuoteEnvelope fields: 0 - name: TaskQuoteResponse fields: 10 - name: TaskRecord fields: 18 - name: TaskRecordEnvelope fields: 0 - name: TaskRetention fields: 3 description: When this task's content is scheduled to be removed, and which layer decided it. Omitted for tasks created before per-task retention existed; those follow the platform maximum. - name: TaskTranscript fields: 7 description: Structured transcription result, present only on speech-to-text endpoints that return it. `text` above stays the plain transcript; this object adds timing and language details. Erased together with th - name: TaskTranscriptChannel fields: 5 - name: TaskTranscriptWord fields: 5 - name: UploadURLEnvelope fields: 0 - name: UploadURLRequest fields: 2 - name: UploadURLResponse fields: 7 - name: UsageDayItem fields: 5 - name: UsageModelItem fields: 5 - name: Video fields: 10 - name: VideoCreateRequest fields: 5 relationships: - from: FundingOverview to: CreditFacilityItem type: has_one via: credit - from: FundingOverview to: FundingGrantItem type: has_many via: grants - from: TaskQuoteEnvelope to: TaskQuoteResponse type: has_one via: data - from: RetryTaskEnvelope to: RetryTaskResponse type: has_one via: data - from: TaskPurgeEnvelope to: TaskPurgeResponse type: has_one via: data - from: CreateTaskEnvelope to: CreateTaskResponse type: has_one via: data - from: TaskOutput to: TaskTranscript type: has_one via: transcript - from: TaskOutput to: TaskOutputAsset type: has_many via: assets - from: TaskTranscript to: TaskTranscriptWord type: has_many via: words - from: TaskTranscript to: TaskTranscriptChannel type: has_many via: channels - from: TaskTranscriptChannel to: TaskTranscriptWord type: has_many via: words - from: TaskRecord to: TaskOutput type: has_one via: output - from: TaskRecord to: TaskRetention type: has_one via: retention - from: TaskRecordEnvelope to: TaskRecord type: has_one via: data - from: APIKeyTaskListResponse to: APIKeyTaskItem type: has_many via: items - from: APIKeyTaskListEnvelope to: APIKeyTaskListResponse type: has_one via: data - from: APIKeyUsageResponse to: UsageDayItem type: has_many via: days - from: APIKeyUsageResponse to: UsageModelItem type: has_many via: models - from: APIKeyUsageEnvelope to: APIKeyUsageResponse type: has_one via: data - from: Balance to: FundingOverview type: has_one via: funding - from: BalanceEnvelope to: Balance type: has_one via: data - from: APIModel to: APIModelPrice type: has_many via: pricing - from: APIModel to: APIModelPrice type: has_one via: startingPrice - from: APIModel to: APIModelExample type: has_many via: examples - from: APIModelList to: APIModel type: has_many via: items - from: ModelEnvelope to: APIModel type: has_one via: data - from: PublicCatalogEnvelope to: PublicCatalogList type: has_one via: data - from: PublicCatalogList to: PublicCatalogItem type: has_many via: items - from: PublicCatalogItem to: PublicCatalogPrice type: has_one via: price - from: ModelListEnvelope to: APIModelList type: has_one via: data - from: UploadURLEnvelope to: UploadURLResponse type: has_one via: data - from: FileCommitEnvelope to: FileCommitResponse type: has_one via: data - from: DownloadURLEnvelope to: DownloadURLResponse type: has_one via: data