Reference
API reference
Every operation of https://kinoseed.app/api/v1, version 1.0.0, rendered from /openapi.json. Feed that file to any OpenAPI tool for the same thing in your editor.
Authentication
Bearer API keys: Authorization: Bearer ks_live_.... Operations marked Public need none. See Authentication for keys and scopes.
Account
The account behind the key.
Credit balance
get/api/v1/credits
The account's credit balance and subscription. Needs the credits:read scope.
curl https://kinoseed.app/api/v1/credits \
-H "Authorization: Bearer ks_live_YOUR_KEY"
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | CreditsResponse | Balance and plan. |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks credits:read. |
| 429 | ErrorEnvelope | Over the key's request budget; see Retry-After. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| balance | integer | Credits the account holds right now. |
| currency | "credits" | |
| creditUsd | number | What one credit costs at the headline price, in USD. |
| plan | object | null | The subscription, or null on an account without a plan. |
Catalog
What can be run and what it costs.
Model catalog
get/api/v1/models
Every model the API can run, with the inputs it takes, its aspects, durations and resolutions, and an example price in credits. Public; no key needed. Cached for five minutes.
curl "https://kinoseed.app/api/v1/models?kind=video"
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| kind | query | unknown | no |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | ModelsResponse | The catalog. |
| 400 | ErrorEnvelope | Unknown kind. |
This document
get/api/v1/openapi.json
The OpenAPI 3.1 description of this API. Also served at the site root as /openapi.json.
curl https://kinoseed.app/openapi.json
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | object | OpenAPI 3.1 document. |
Response fields
The 200 body.
No fields.
Generate
Start runs and price them.
Generate images
post/api/v1/images
Start an image run. The price is quoted from the model and count, charged before the provider is called, and refunded in full if the provider refuses. Reference images must be public https URLs or URLs returned by POST /files. Needs images:generate.
curl -X POST https://kinoseed.app/api/v1/images \
-H "Authorization: Bearer ks_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1042-hero" \
-d '{
"prompt": "a ceramic mug on a sunlit desk, product photo",
"model": "nano-banana-pro",
"aspect": "1:1",
"count": 2
}'
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| Idempotency-Key | header | string | no | Any string of your choosing, up to 255 characters. A retry with the same key and body returns the first response (with Idempotent-Replayed: true) instead of starting and charging a second run. Kept for 24 hours.up to 255 characters |
Request body
application/json
| Field | Type | Required | Description |
|---|---|---|---|
| prompt | string | yes | up to 4000 characters |
| model | string | no | An image model id from GET /models. Defaults to the catalog default. |
| aspect | string | no | e.g. "1:1" |
| count | integer | no | Images per run; the price multiplies.1 to 8 |
| referenceImageUrls | string (uri)[] | no | up to 8 items |
| seed | integer | no | |
| metadata | Record<string, string> | no | Up to 16 string values the caller wants back on the job. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | Job | The provider refused the request at submission. The Job has status failed, error says why, and credits.refunded equals credits.charged: nothing was spent. |
| 201 | Job | The image run was started and charged. Poll GET /jobs/{id} (or use ?wait=) until status is completed or failed. |
| 400 | ErrorEnvelope | Body failed validation (invalid_request), the model is not in the catalog (unknown_model), or a URL is not public https (unsafe_url). |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 402 | ErrorEnvelope | The balance does not cover the quote; details has needed, balance and topUpUrl. |
| 403 | ErrorEnvelope | The key lacks the images:generate scope. |
| 409 | ErrorEnvelope | A request with this Idempotency-Key is still being processed. |
| 422 | ErrorEnvelope | This Idempotency-Key was already used with a different body. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| id | string | |
| kind | "image" | "video" | |
| status | JobStatus | |
| progress | integer | 0 to 100 |
| model | string | |
| prompt | string | |
| credits | object | |
| credits.charged | integer | |
| credits.refunded | integer | |
| output | object | |
| output.videoUrl | string | null | |
| output.imageUrls | string[] | |
| output.thumbUrl | string | null | |
| error | string | null | In the customer's words; null unless failed. |
| metadata | Record<string, string> | null | |
| createdAt | string (date-time) | |
| completedAt | string (date-time) | null | |
| links | object | |
| links.self | string (uri) | |
| links.web | string (uri) |
Generate a video
post/api/v1/videos
Start a video run. The price depends on the model, duration, resolution, sound and whether frames or reference images are sent; it is charged before the provider is called and refunded in full if the provider refuses. Needs videos:generate.
curl -X POST https://kinoseed.app/api/v1/videos \
-H "Authorization: Bearer ks_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "slow push in on the mug as steam rises, morning light",
"model": "kling-3",
"duration": 5,
"aspect": "16:9",
"startImageUrl": "https://example.com/mug.png"
}'
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| Idempotency-Key | header | string | no | Any string of your choosing, up to 255 characters. A retry with the same key and body returns the first response (with Idempotent-Replayed: true) instead of starting and charging a second run. Kept for 24 hours.up to 255 characters |
Request body
application/json
| Field | Type | Required | Description |
|---|---|---|---|
| prompt | string | yes | up to 2000 characters |
| model | string | no | A video model id from GET /models. Defaults to the catalog default. |
| aspect | string | no | e.g. "16:9" |
| duration | integer | no | Seconds; snapped to the model's nearest allowed length.2 to 20 |
| resolution | string | no | |
| audio | boolean | no | Generate sound. Off by default; it can double the price. |
| startImageUrl | string (uri) | no | Public https URL, or a URL returned by this API.up to 2048 characters |
| endImageUrl | string (uri) | no | Public https URL, or a URL returned by this API.up to 2048 characters |
| referenceImageUrls | string (uri)[] | no | up to 9 items |
| seed | integer | no | |
| metadata | Record<string, string> | no | Up to 16 string values the caller wants back on the job. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | Job | The provider refused the request at submission. The Job has status failed, error says why, and credits.refunded equals credits.charged: nothing was spent. |
| 201 | Job | The video run was started and charged. Poll GET /jobs/{id} (or use ?wait=) until status is completed or failed. |
| 400 | ErrorEnvelope | Body failed validation (invalid_request), the model is not in the catalog (unknown_model), or a URL is not public https (unsafe_url). |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 402 | ErrorEnvelope | The balance does not cover the quote; details has needed, balance and topUpUrl. |
| 403 | ErrorEnvelope | The key lacks the videos:generate scope. |
| 409 | ErrorEnvelope | A request with this Idempotency-Key is still being processed. |
| 422 | ErrorEnvelope | This Idempotency-Key was already used with a different body. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| id | string | |
| kind | "image" | "video" | |
| status | JobStatus | |
| progress | integer | 0 to 100 |
| model | string | |
| prompt | string | |
| credits | object | |
| credits.charged | integer | |
| credits.refunded | integer | |
| output | object | |
| output.videoUrl | string | null | |
| output.imageUrls | string[] | |
| output.thumbUrl | string | null | |
| error | string | null | In the customer's words; null unless failed. |
| metadata | Record<string, string> | null | |
| createdAt | string (date-time) | |
| completedAt | string (date-time) | null | |
| links | object | |
| links.self | string (uri) | |
| links.web | string (uri) |
Price a run
post/api/v1/quote
What POST /images or POST /videos would charge for this body, without starting anything. Send the same body with a kind field. Any live key.
curl -X POST https://kinoseed.app/api/v1/quote \
-H "Authorization: Bearer ks_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "kind": "video", "prompt": "a lighthouse at dusk", "model": "kling-3", "duration": 10, "audio": true }'
Request body
application/json
No fields.
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | QuoteResponse | The price in credits and USD. |
| 400 | ErrorEnvelope | Body failed validation, or the model is not in the catalog (unknown_model). |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| credits | integer | |
| usd | number | |
| endpoint | string | The provider endpoint the run would land on. |
| estimated | boolean |
Jobs
Follow runs to their result.
List jobs
get/api/v1/jobs
The account's jobs, newest first, including runs started in the web app. Page with cursor from nextCursor. Needs jobs:read.
curl "https://kinoseed.app/api/v1/jobs?limit=20&status=completed&kind=video" \
-H "Authorization: Bearer ks_live_YOUR_KEY"
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| limit | query | integer | no | 1 to 100 |
| status | query | JobStatus | no | |
| kind | query | "image" | "video" | no | |
| cursor | query | string | no |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | JobsListResponse | A page of jobs. |
| 400 | ErrorEnvelope | A query parameter is out of range. |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks jobs:read. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Read a job
get/api/v1/jobs/{id}
One job, advanced against the provider on each read. With ?wait=N (1 to 50 seconds) the response is held until the job finishes or the time is up, polling every 3 seconds. Needs jobs:read.
# Hold the response up to 50 seconds while the job runs.
curl "https://kinoseed.app/api/v1/jobs/JOB_ID?wait=50" \
-H "Authorization: Bearer ks_live_YOUR_KEY"
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | yes | The job id returned when it was created. |
| wait | query | integer | no | Hold the response up to this many seconds while the job is still running.1 to 50 |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | Job | The job. |
| 400 | ErrorEnvelope | wait is out of range. |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks jobs:read. |
| 404 | ErrorEnvelope | No job with this id belongs to this account. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| id | string | |
| kind | "image" | "video" | |
| status | JobStatus | |
| progress | integer | 0 to 100 |
| model | string | |
| prompt | string | |
| credits | object | |
| credits.charged | integer | |
| credits.refunded | integer | |
| output | object | |
| output.videoUrl | string | null | |
| output.imageUrls | string[] | |
| output.thumbUrl | string | null | |
| error | string | null | In the customer's words; null unless failed. |
| metadata | Record<string, string> | null | |
| createdAt | string (date-time) | |
| completedAt | string (date-time) | null | |
| links | object | |
| links.self | string (uri) | |
| links.web | string (uri) |
Delete a job
delete/api/v1/jobs/{id}
Remove a job from the account's library. Credits are not affected: a refused run was already refunded, a finished one was delivered. Needs jobs:write.
curl -X DELETE https://kinoseed.app/api/v1/jobs/JOB_ID \
-H "Authorization: Bearer ks_live_YOUR_KEY"
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | yes | The job id returned when it was created. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | JobDeleteResponse | Deleted. |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks jobs:write. |
| 404 | ErrorEnvelope | No job with this id belongs to this account. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| id | string | |
| deleted | true |
Files
Input files for runs.
Upload an input file
post/api/v1/files
Store an image, audio or video file (up to 200 MB) and get back a URL that POST /images and POST /videos accept as a reference or frame. Needs files:write.
curl -X POST https://kinoseed.app/api/v1/files \
-H "Authorization: Bearer ks_live_YOUR_KEY" \
-F "file=@./mug.png"
Request body
multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
| file | string (binary) | yes | An image (png, jpeg, webp, gif), audio or video file, up to 200 MB. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 201 | FileUploadResponse | Stored. |
| 400 | ErrorEnvelope | Not multipart, no file field, too large (413) or an unsupported type (415). |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks files:write. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
| 503 | ErrorEnvelope | Storage is not available right now. |
Response fields
The 201 body.
| Field | Type | Description |
|---|---|---|
| url | string (uri) | |
| size | integer | |
| type | string | e.g. "image/png" |
Webhooks
Be told when a job finishes instead of polling.
List webhook endpoints
get/api/v1/webhooks
The account's webhook endpoints, oldest first. Secrets are never returned here. Needs webhooks:manage.
curl https://kinoseed.app/api/v1/webhooks \
-H "Authorization: Bearer ks_live_YOUR_KEY"
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | WebhooksListResponse | The endpoints. |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks webhooks:manage (keys do not get it unless it is ticked at creation). |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Create a webhook endpoint
post/api/v1/webhooks
Register a public https URL to receive job.completed and job.failed events, signed with the returned secret. The secret is in this response only. Up to 5 endpoints per account. Needs webhooks:manage.
curl -X POST https://kinoseed.app/api/v1/webhooks \
-H "Authorization: Bearer ks_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/hooks/kinoseed", "events": ["job.completed", "job.failed"] }'
# The response holds "secret": "whsec_..." once. Store it now.
Request body
application/json
| Field | Type | Required | Description |
|---|---|---|---|
| url | string (uri) | yes | A public https URL that accepts POST. Private addresses, IP literals and plain http are refused.up to 2048 characters ยท e.g. "https://example.com/hooks/kinoseed" |
| events | WebhookEventType[] | no | The events to send. Defaults to both. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 201 | WebhookCreatedResponse | Created. Store secret now; it is never shown again. |
| 400 | ErrorEnvelope | Body failed validation (invalid_request), or the URL is not public https (unsafe_url). |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks webhooks:manage (keys do not get it unless it is ticked at creation). |
| 409 | ErrorEnvelope | The account already has 5 endpoints. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 201 body.
No fields.
Delete a webhook endpoint
delete/api/v1/webhooks/{id}
Remove an endpoint. Deliveries still waiting for a retry are dropped with it. Needs webhooks:manage.
curl -X DELETE https://kinoseed.app/api/v1/webhooks/WEBHOOK_ID \
-H "Authorization: Bearer ks_live_YOUR_KEY"
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | yes | The webhook endpoint id. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | WebhookDeleteResponse | Deleted. |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks webhooks:manage (keys do not get it unless it is ticked at creation). |
| 404 | ErrorEnvelope | No webhook endpoint with this id belongs to this account. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| id | string | |
| deleted | true |
Send a test event
post/api/v1/webhooks/{id}/test
Send a signed ping event to the endpoint now and answer with its HTTP status and latency. A 2xx answer switches a disabled endpoint back on and clears its failure count. Limited to 10 tests an hour per endpoint and 30 per account. error is one of: connection refused, timed out, DNS lookup failed, TLS error, blocked address, network error, or HTTP <status>. Needs webhooks:manage.
curl -X POST https://kinoseed.app/api/v1/webhooks/WEBHOOK_ID/test \
-H "Authorization: Bearer ks_live_YOUR_KEY"
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | yes | The webhook endpoint id. |
Responses
| Status | Body | Meaning |
|---|---|---|
| 200 | WebhookTestResponse | What the endpoint answered. delivered is false for a non-2xx status, a timeout or an unreachable host. |
| 401 | ErrorEnvelope | Missing, invalid or revoked key. |
| 403 | ErrorEnvelope | The key lacks webhooks:manage (keys do not get it unless it is ticked at creation). |
| 404 | ErrorEnvelope | No webhook endpoint with this id belongs to this account. |
| 429 | ErrorEnvelope | Over a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress. |
Response fields
The 200 body.
| Field | Type | Description |
|---|---|---|
| delivered | boolean | Whether the endpoint answered with a 2xx status. |
| status | integer | null | The endpoint's HTTP status; null when it could not be reached. |
| latencyMs | integer | |
| error | string | null | |
| eventId | string | The evt_ id of the ping that was sent. |
Schemas
WebhookEventType
job.completed: a job finished and its outputs are on our storage. job.failed: a job failed and its credits were refunded.
"job.completed" | "job.failed"
JobStatus
"queued" | "running" | "completed" | "failed"
Job
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | yes | |
| kind | "image" | "video" | yes | |
| status | JobStatus | yes | |
| progress | integer | yes | 0 to 100 |
| model | string | yes | |
| prompt | string | yes | |
| credits | object | yes | |
| credits.charged | integer | yes | |
| credits.refunded | integer | yes | |
| output | object | yes | |
| output.videoUrl | string | null | yes | |
| output.imageUrls | string[] | yes | |
| output.thumbUrl | string | null | yes | |
| error | string | null | yes | In the customer's words; null unless failed. |
| metadata | Record<string, string> | null | yes | |
| createdAt | string (date-time) | yes | |
| completedAt | string (date-time) | null | yes | |
| links | object | yes | |
| links.self | string (uri) | yes | |
| links.web | string (uri) | yes |
WebhookEventPayload
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | yes | Event id, evt_...; also sent as the Kinoseed-Event-Id header. Use it to drop duplicates. |
| type | WebhookEventType | yes | job.completed: a job finished and its outputs are on our storage. job.failed: a job failed and its credits were refunded. |
| createdAt | string (date-time) | yes | |
| data | Job | yes |
CreditsResponse
| Field | Type | Required | Description |
|---|---|---|---|
| balance | integer | yes | Credits the account holds right now. |
| currency | "credits" | yes | |
| creditUsd | number | yes | What one credit costs at the headline price, in USD. |
| plan | object | null | yes | The subscription, or null on an account without a plan. |
ErrorCode
Stable, machine-readable error code.
"unauthorized" | "forbidden_scope" | "insufficient_credits" | "rate_limited" | "invalid_request" | "unknown_model" | "unsafe_url" | "not_found" | "limit_reached" | "idempotency_in_flight" | "idempotency_mismatch" | "too_many_running" | "provider_unavailable" | "internal"
ErrorEnvelope
| Field | Type | Required | Description |
|---|---|---|---|
| error | object | yes | |
| error.code | ErrorCode | yes | Stable, machine-readable error code. |
| error.message | string | yes | For a person reading a log; wording may change. |
| error.details | Record<string, unknown> | no | What the client needs to act: needed, balance and topUpUrl on insufficient_credits; retryAfterSeconds on rate_limited; issues on invalid_request. |
ModelKind
image: text or reference images to an image. video: text or frames to a clip. edit: a source clip to a new clip.
"image" | "video" | "edit"
ModelPricingExample
| Field | Type | Required | Description |
|---|---|---|---|
| credits | integer | yes | |
| usd | number | yes | credits times creditUsd. |
| description | string | yes | e.g. "5s at 720p, no sound" |
| estimated | boolean | yes | True when the provider rate behind this price is an estimate. |
Model
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | yes | e.g. "kling-3" |
| kind | ModelKind | yes | image: text or reference images to an image. video: text or frames to a clip. edit: a source clip to a new clip. |
| name | string | yes | e.g. "Kling 3.0" |
| description | string | yes | |
| inputs | object | yes | |
| inputs.text | boolean | yes | Takes a prompt alone. |
| inputs.image | boolean | yes | Takes a start frame (video) or a reference image (image). |
| inputs.endImage | boolean | yes | Takes an end frame. |
| inputs.referenceImages | integer | yes | How many reference images the multi-reference mode accepts; 0 when there is none. |
| inputs.video | boolean | yes | Takes a source clip. |
| aspects | string[] | yes | e.g. ["16:9","9:16","1:1"] |
| durations | number[] | yes | Seconds the model can produce; empty for images and edits. |
| resolutions | string[] | yes | Empty when the endpoint offers no choice. |
| supportsAudio | boolean | yes | |
| default | boolean | yes | Used when a request names no model. |
| pricing | ModelPricingExample | yes |
ModelsResponse
| Field | Type | Required | Description |
|---|---|---|---|
| creditUsd | number | yes | |
| models | Model[] | yes |
ImageCreateBody
| Field | Type | Required | Description |
|---|---|---|---|
| prompt | string | yes | up to 4000 characters |
| model | string | no | An image model id from GET /models. Defaults to the catalog default. |
| aspect | string | no | e.g. "1:1" |
| count | integer | no | Images per run; the price multiplies.1 to 8 |
| referenceImageUrls | string (uri)[] | no | up to 8 items |
| seed | integer | no | |
| metadata | Record<string, string> | no | Up to 16 string values the caller wants back on the job. |
VideoCreateBody
| Field | Type | Required | Description |
|---|---|---|---|
| prompt | string | yes | up to 2000 characters |
| model | string | no | A video model id from GET /models. Defaults to the catalog default. |
| aspect | string | no | e.g. "16:9" |
| duration | integer | no | Seconds; snapped to the model's nearest allowed length.2 to 20 |
| resolution | string | no | |
| audio | boolean | no | Generate sound. Off by default; it can double the price. |
| startImageUrl | string (uri) | no | Public https URL, or a URL returned by this API.up to 2048 characters |
| endImageUrl | string (uri) | no | Public https URL, or a URL returned by this API.up to 2048 characters |
| referenceImageUrls | string (uri)[] | no | up to 9 items |
| seed | integer | no | |
| metadata | Record<string, string> | no | Up to 16 string values the caller wants back on the job. |
QuoteResponse
| Field | Type | Required | Description |
|---|---|---|---|
| credits | integer | yes | |
| usd | number | yes | |
| endpoint | string | yes | The provider endpoint the run would land on. |
| estimated | boolean | yes |
QuoteBody
No fields.
JobsListResponse
| Field | Type | Required | Description |
|---|---|---|---|
| jobs | Job[] | yes | |
| nextCursor | string | null | yes |
JobDeleteResponse
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | yes | |
| deleted | true | yes |
FileUploadResponse
| Field | Type | Required | Description |
|---|---|---|---|
| url | string (uri) | yes | |
| size | integer | yes | |
| type | string | yes | e.g. "image/png" |
FileUploadBody
| Field | Type | Required | Description |
|---|---|---|---|
| file | string (binary) | yes | An image (png, jpeg, webp, gif), audio or video file, up to 200 MB. |
WebhookEndpoint
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | yes | |
| url | string (uri) | yes | |
| events | WebhookEventType[] | yes | |
| active | boolean | yes | False once 20 delivery attempts in a row have failed. A successful POST /webhooks/{id}/test switches it back on. |
| failureCount | integer | yes | Failed delivery attempts since the last success. |
| disabledAt | string (date-time) | null | yes | |
| lastDeliveredAt | string (date-time) | null | yes | |
| createdAt | string (date-time) | yes |
WebhooksListResponse
| Field | Type | Required | Description |
|---|---|---|---|
| webhooks | WebhookEndpoint[] | yes |
WebhookCreatedResponse
object
WebhookCreateBody
| Field | Type | Required | Description |
|---|---|---|---|
| url | string (uri) | yes | A public https URL that accepts POST. Private addresses, IP literals and plain http are refused.up to 2048 characters ยท e.g. "https://example.com/hooks/kinoseed" |
| events | WebhookEventType[] | no | The events to send. Defaults to both. |
WebhookDeleteResponse
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | yes | |
| deleted | true | yes |
WebhookTestResponse
| Field | Type | Required | Description |
|---|---|---|---|
| delivered | boolean | yes | Whether the endpoint answered with a 2xx status. |
| status | integer | null | yes | The endpoint's HTTP status; null when it could not be reached. |
| latencyMs | integer | yes | |
| error | string | null | yes | |
| eventId | string | yes | The evt_ id of the ping that was sent. |