Kinoseed

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

Bearer keycredits:readgetCredits

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

StatusBodyMeaning
200CreditsResponseBalance and plan.
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks credits:read.
429ErrorEnvelopeOver the key's request budget; see Retry-After.

Response fields

The 200 body.

FieldTypeDescription
balanceintegerCredits the account holds right now.
currency"credits"
creditUsdnumberWhat one credit costs at the headline price, in USD.
planobject | nullThe subscription, or null on an account without a plan.

Catalog

What can be run and what it costs.

Model catalog

get/api/v1/models

PubliclistModels

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

NameInTypeRequiredDescription
kindqueryunknownno

Responses

StatusBodyMeaning
200ModelsResponseThe catalog.
400ErrorEnvelopeUnknown kind.

Response fields

The 200 body.

FieldTypeDescription
creditUsdnumber
modelsModel[]

This document

get/api/v1/openapi.json

PublicgetOpenApi

The OpenAPI 3.1 description of this API. Also served at the site root as /openapi.json.

curl https://kinoseed.app/openapi.json

Responses

StatusBodyMeaning
200objectOpenAPI 3.1 document.

Response fields

The 200 body.

No fields.

Generate

Start runs and price them.

Generate images

post/api/v1/images

Bearer keyimages:generatecreateImage

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

NameInTypeRequiredDescription
Idempotency-KeyheaderstringnoAny 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

FieldTypeRequiredDescription
promptstringyesup to 4000 characters
modelstringnoAn image model id from GET /models. Defaults to the catalog default.
aspectstringnoe.g. "1:1"
countintegernoImages per run; the price multiplies.1 to 8
referenceImageUrlsstring (uri)[]noup to 8 items
seedintegerno
metadataRecord<string, string>noUp to 16 string values the caller wants back on the job.

Responses

StatusBodyMeaning
200JobThe provider refused the request at submission. The Job has status failed, error says why, and credits.refunded equals credits.charged: nothing was spent.
201JobThe image run was started and charged. Poll GET /jobs/{id} (or use ?wait=) until status is completed or failed.
400ErrorEnvelopeBody failed validation (invalid_request), the model is not in the catalog (unknown_model), or a URL is not public https (unsafe_url).
401ErrorEnvelopeMissing, invalid or revoked key.
402ErrorEnvelopeThe balance does not cover the quote; details has needed, balance and topUpUrl.
403ErrorEnvelopeThe key lacks the images:generate scope.
409ErrorEnvelopeA request with this Idempotency-Key is still being processed.
422ErrorEnvelopeThis Idempotency-Key was already used with a different body.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
idstring
kind"image" | "video"
statusJobStatus
progressinteger0 to 100
modelstring
promptstring
creditsobject
credits.chargedinteger
credits.refundedinteger
outputobject
output.videoUrlstring | null
output.imageUrlsstring[]
output.thumbUrlstring | null
errorstring | nullIn the customer's words; null unless failed.
metadataRecord<string, string> | null
createdAtstring (date-time)
completedAtstring (date-time) | null
linksobject
links.selfstring (uri)
links.webstring (uri)

Generate a video

post/api/v1/videos

Bearer keyvideos:generatecreateVideo

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

NameInTypeRequiredDescription
Idempotency-KeyheaderstringnoAny 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

FieldTypeRequiredDescription
promptstringyesup to 2000 characters
modelstringnoA video model id from GET /models. Defaults to the catalog default.
aspectstringnoe.g. "16:9"
durationintegernoSeconds; snapped to the model's nearest allowed length.2 to 20
resolutionstringno
audiobooleannoGenerate sound. Off by default; it can double the price.
startImageUrlstring (uri)noPublic https URL, or a URL returned by this API.up to 2048 characters
endImageUrlstring (uri)noPublic https URL, or a URL returned by this API.up to 2048 characters
referenceImageUrlsstring (uri)[]noup to 9 items
seedintegerno
metadataRecord<string, string>noUp to 16 string values the caller wants back on the job.

Responses

StatusBodyMeaning
200JobThe provider refused the request at submission. The Job has status failed, error says why, and credits.refunded equals credits.charged: nothing was spent.
201JobThe video run was started and charged. Poll GET /jobs/{id} (or use ?wait=) until status is completed or failed.
400ErrorEnvelopeBody failed validation (invalid_request), the model is not in the catalog (unknown_model), or a URL is not public https (unsafe_url).
401ErrorEnvelopeMissing, invalid or revoked key.
402ErrorEnvelopeThe balance does not cover the quote; details has needed, balance and topUpUrl.
403ErrorEnvelopeThe key lacks the videos:generate scope.
409ErrorEnvelopeA request with this Idempotency-Key is still being processed.
422ErrorEnvelopeThis Idempotency-Key was already used with a different body.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
idstring
kind"image" | "video"
statusJobStatus
progressinteger0 to 100
modelstring
promptstring
creditsobject
credits.chargedinteger
credits.refundedinteger
outputobject
output.videoUrlstring | null
output.imageUrlsstring[]
output.thumbUrlstring | null
errorstring | nullIn the customer's words; null unless failed.
metadataRecord<string, string> | null
createdAtstring (date-time)
completedAtstring (date-time) | null
linksobject
links.selfstring (uri)
links.webstring (uri)

Price a run

post/api/v1/quote

Bearer keyquote

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

StatusBodyMeaning
200QuoteResponseThe price in credits and USD.
400ErrorEnvelopeBody failed validation, or the model is not in the catalog (unknown_model).
401ErrorEnvelopeMissing, invalid or revoked key.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
creditsinteger
usdnumber
endpointstringThe provider endpoint the run would land on.
estimatedboolean

Jobs

Follow runs to their result.

List jobs

get/api/v1/jobs

Bearer keyjobs:readlistJobs

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

NameInTypeRequiredDescription
limitqueryintegerno1 to 100
statusqueryJobStatusno
kindquery"image" | "video"no
cursorquerystringno

Responses

StatusBodyMeaning
200JobsListResponseA page of jobs.
400ErrorEnvelopeA query parameter is out of range.
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks jobs:read.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
jobsJob[]
nextCursorstring | null

Read a job

get/api/v1/jobs/{id}

Bearer keyjobs:readgetJob

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

NameInTypeRequiredDescription
idpathstringyesThe job id returned when it was created.
waitqueryintegernoHold the response up to this many seconds while the job is still running.1 to 50

Responses

StatusBodyMeaning
200JobThe job.
400ErrorEnvelopewait is out of range.
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks jobs:read.
404ErrorEnvelopeNo job with this id belongs to this account.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
idstring
kind"image" | "video"
statusJobStatus
progressinteger0 to 100
modelstring
promptstring
creditsobject
credits.chargedinteger
credits.refundedinteger
outputobject
output.videoUrlstring | null
output.imageUrlsstring[]
output.thumbUrlstring | null
errorstring | nullIn the customer's words; null unless failed.
metadataRecord<string, string> | null
createdAtstring (date-time)
completedAtstring (date-time) | null
linksobject
links.selfstring (uri)
links.webstring (uri)

Delete a job

delete/api/v1/jobs/{id}

Bearer keyjobs:writedeleteJob

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

NameInTypeRequiredDescription
idpathstringyesThe job id returned when it was created.

Responses

StatusBodyMeaning
200JobDeleteResponseDeleted.
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks jobs:write.
404ErrorEnvelopeNo job with this id belongs to this account.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
idstring
deletedtrue

Files

Input files for runs.

Upload an input file

post/api/v1/files

Bearer keyfiles:writeuploadFile

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

FieldTypeRequiredDescription
filestring (binary)yesAn image (png, jpeg, webp, gif), audio or video file, up to 200 MB.

Responses

StatusBodyMeaning
201FileUploadResponseStored.
400ErrorEnvelopeNot multipart, no file field, too large (413) or an unsupported type (415).
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks files:write.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.
503ErrorEnvelopeStorage is not available right now.

Response fields

The 201 body.

FieldTypeDescription
urlstring (uri)
sizeinteger
typestringe.g. "image/png"

Webhooks

Be told when a job finishes instead of polling.

List webhook endpoints

get/api/v1/webhooks

Bearer keywebhooks:managelistWebhooks

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

StatusBodyMeaning
200WebhooksListResponseThe endpoints.
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks webhooks:manage (keys do not get it unless it is ticked at creation).
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
webhooksWebhookEndpoint[]

Create a webhook endpoint

post/api/v1/webhooks

Bearer keywebhooks:managecreateWebhook

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

FieldTypeRequiredDescription
urlstring (uri)yesA 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"
eventsWebhookEventType[]noThe events to send. Defaults to both.

Responses

StatusBodyMeaning
201WebhookCreatedResponseCreated. Store secret now; it is never shown again.
400ErrorEnvelopeBody failed validation (invalid_request), or the URL is not public https (unsafe_url).
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks webhooks:manage (keys do not get it unless it is ticked at creation).
409ErrorEnvelopeThe account already has 5 endpoints.
429ErrorEnvelopeOver 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}

Bearer keywebhooks:managedeleteWebhook

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

NameInTypeRequiredDescription
idpathstringyesThe webhook endpoint id.

Responses

StatusBodyMeaning
200WebhookDeleteResponseDeleted.
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks webhooks:manage (keys do not get it unless it is ticked at creation).
404ErrorEnvelopeNo webhook endpoint with this id belongs to this account.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
idstring
deletedtrue

Send a test event

post/api/v1/webhooks/{id}/test

Bearer keywebhooks:managetestWebhook

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

NameInTypeRequiredDescription
idpathstringyesThe webhook endpoint id.

Responses

StatusBodyMeaning
200WebhookTestResponseWhat the endpoint answered. delivered is false for a non-2xx status, a timeout or an unreachable host.
401ErrorEnvelopeMissing, invalid or revoked key.
403ErrorEnvelopeThe key lacks webhooks:manage (keys do not get it unless it is ticked at creation).
404ErrorEnvelopeNo webhook endpoint with this id belongs to this account.
429ErrorEnvelopeOver a rate budget; see Retry-After. Also too_many_running when the account already has 5 runs in progress.

Response fields

The 200 body.

FieldTypeDescription
deliveredbooleanWhether the endpoint answered with a 2xx status.
statusinteger | nullThe endpoint's HTTP status; null when it could not be reached.
latencyMsinteger
errorstring | null
eventIdstringThe 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

FieldTypeRequiredDescription
idstringyes
kind"image" | "video"yes
statusJobStatusyes
progressintegeryes0 to 100
modelstringyes
promptstringyes
creditsobjectyes
credits.chargedintegeryes
credits.refundedintegeryes
outputobjectyes
output.videoUrlstring | nullyes
output.imageUrlsstring[]yes
output.thumbUrlstring | nullyes
errorstring | nullyesIn the customer's words; null unless failed.
metadataRecord<string, string> | nullyes
createdAtstring (date-time)yes
completedAtstring (date-time) | nullyes
linksobjectyes
links.selfstring (uri)yes
links.webstring (uri)yes

WebhookEventPayload

FieldTypeRequiredDescription
idstringyesEvent id, evt_...; also sent as the Kinoseed-Event-Id header. Use it to drop duplicates.
typeWebhookEventTypeyesjob.completed: a job finished and its outputs are on our storage. job.failed: a job failed and its credits were refunded.
createdAtstring (date-time)yes
dataJobyes

CreditsResponse

FieldTypeRequiredDescription
balanceintegeryesCredits the account holds right now.
currency"credits"yes
creditUsdnumberyesWhat one credit costs at the headline price, in USD.
planobject | nullyesThe 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

FieldTypeRequiredDescription
errorobjectyes
error.codeErrorCodeyesStable, machine-readable error code.
error.messagestringyesFor a person reading a log; wording may change.
error.detailsRecord<string, unknown>noWhat 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

FieldTypeRequiredDescription
creditsintegeryes
usdnumberyescredits times creditUsd.
descriptionstringyese.g. "5s at 720p, no sound"
estimatedbooleanyesTrue when the provider rate behind this price is an estimate.

Model

FieldTypeRequiredDescription
idstringyese.g. "kling-3"
kindModelKindyesimage: text or reference images to an image. video: text or frames to a clip. edit: a source clip to a new clip.
namestringyese.g. "Kling 3.0"
descriptionstringyes
inputsobjectyes
inputs.textbooleanyesTakes a prompt alone.
inputs.imagebooleanyesTakes a start frame (video) or a reference image (image).
inputs.endImagebooleanyesTakes an end frame.
inputs.referenceImagesintegeryesHow many reference images the multi-reference mode accepts; 0 when there is none.
inputs.videobooleanyesTakes a source clip.
aspectsstring[]yese.g. ["16:9","9:16","1:1"]
durationsnumber[]yesSeconds the model can produce; empty for images and edits.
resolutionsstring[]yesEmpty when the endpoint offers no choice.
supportsAudiobooleanyes
defaultbooleanyesUsed when a request names no model.
pricingModelPricingExampleyes

ModelsResponse

FieldTypeRequiredDescription
creditUsdnumberyes
modelsModel[]yes

ImageCreateBody

FieldTypeRequiredDescription
promptstringyesup to 4000 characters
modelstringnoAn image model id from GET /models. Defaults to the catalog default.
aspectstringnoe.g. "1:1"
countintegernoImages per run; the price multiplies.1 to 8
referenceImageUrlsstring (uri)[]noup to 8 items
seedintegerno
metadataRecord<string, string>noUp to 16 string values the caller wants back on the job.

VideoCreateBody

FieldTypeRequiredDescription
promptstringyesup to 2000 characters
modelstringnoA video model id from GET /models. Defaults to the catalog default.
aspectstringnoe.g. "16:9"
durationintegernoSeconds; snapped to the model's nearest allowed length.2 to 20
resolutionstringno
audiobooleannoGenerate sound. Off by default; it can double the price.
startImageUrlstring (uri)noPublic https URL, or a URL returned by this API.up to 2048 characters
endImageUrlstring (uri)noPublic https URL, or a URL returned by this API.up to 2048 characters
referenceImageUrlsstring (uri)[]noup to 9 items
seedintegerno
metadataRecord<string, string>noUp to 16 string values the caller wants back on the job.

QuoteResponse

FieldTypeRequiredDescription
creditsintegeryes
usdnumberyes
endpointstringyesThe provider endpoint the run would land on.
estimatedbooleanyes

QuoteBody

No fields.

JobsListResponse

FieldTypeRequiredDescription
jobsJob[]yes
nextCursorstring | nullyes

JobDeleteResponse

FieldTypeRequiredDescription
idstringyes
deletedtrueyes

FileUploadResponse

FieldTypeRequiredDescription
urlstring (uri)yes
sizeintegeryes
typestringyese.g. "image/png"

FileUploadBody

FieldTypeRequiredDescription
filestring (binary)yesAn image (png, jpeg, webp, gif), audio or video file, up to 200 MB.

WebhookEndpoint

FieldTypeRequiredDescription
idstringyes
urlstring (uri)yes
eventsWebhookEventType[]yes
activebooleanyesFalse once 20 delivery attempts in a row have failed. A successful POST /webhooks/{id}/test switches it back on.
failureCountintegeryesFailed delivery attempts since the last success.
disabledAtstring (date-time) | nullyes
lastDeliveredAtstring (date-time) | nullyes
createdAtstring (date-time)yes

WebhooksListResponse

FieldTypeRequiredDescription
webhooksWebhookEndpoint[]yes

WebhookCreatedResponse

object

WebhookCreateBody

FieldTypeRequiredDescription
urlstring (uri)yesA 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"
eventsWebhookEventType[]noThe events to send. Defaults to both.

WebhookDeleteResponse

FieldTypeRequiredDescription
idstringyes
deletedtrueyes

WebhookTestResponse

FieldTypeRequiredDescription
deliveredbooleanyesWhether the endpoint answered with a 2xx status.
statusinteger | nullyesThe endpoint's HTTP status; null when it could not be reached.
latencyMsintegeryes
errorstring | nullyes
eventIdstringyesThe evt_ id of the ping that was sent.