> For the complete documentation index, see [llms.txt](https://docs.kinesis.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kinesis.network/api/models.md).

# Models

Explore the response objects returned by the Kinesis API.

Response models for OpenAPI 1.5.0. Resource creator identities are null unless the credential has members:read and the person belongs to the resource’s organization. Organization roles use admin, developer and viewer; resource grants retain editor and viewer.

## The GuideDocument object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"GuideDocument":{"type":"object","properties":{"topic":{"type":"string","enum":["getting_started","deploy","operate","troubleshoot","servers","billing","organizations","sharing","errors"],"description":"getting_started (concepts, ids, permissions), deploy (create_app fields), operate (updates, lifecycle, logs), troubleshoot (states and failures), servers (catalog, provisioning, grids), sharing (grantees, invitations), billing, errors (every code)"},"title":{"type":"string"},"markdown":{"type":"string","description":"The guide text, in markdown"}},"required":["topic","title","markdown"],"additionalProperties":false}}}}
```

## The Identity object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Identity":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"}},"required":["id","email","name"],"additionalProperties":false},"limitedToOrgs":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false}},{"type":"null"}],"description":"The organizations the key or connection is limited to; null when it reaches every one the user is in, including ones they join later (orgs.list has them, with the user's role in each)"},"apiKey":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"},"description":"Granted permissions; [\"*\"] is full access, including permissions added to the API later"},"projectIds":{"type":"array","items":{"type":"string"},"description":"Projects the key is limited to; empty means every project"}},"required":["id","name","scopes","projectIds"],"additionalProperties":false},{"type":"null"}],"description":"The key in use, or null when the caller is not using an API key"},"oauthClient":{"anyOf":[{"type":"object","properties":{"grantId":{"type":"string","description":"The connection as listed in the dashboard's connected apps"},"clientId":{"type":"string"},"clientName":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"},"description":"Permissions this connection was authorized with"}},"required":["grantId","clientId","clientName","scopes"],"additionalProperties":false},{"type":"null"}],"description":"The app connected through OAuth (hosted chat connectors), or null"}},"required":["user","limitedToOrgs","apiKey","oauthClient"],"additionalProperties":false}}}}
```

## The Notification object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Notification":{"type":"object","properties":{"id":{"type":"string","description":"Notification id"},"type":{"type":"string","description":"What happened, e.g. share_invitation_received, grid_machines_online"},"title":{"type":"string"},"message":{"type":["string","null"]},"resourceType":{"anyOf":[{"type":"string","enum":["project","app","grid"]},{"type":"null"}]},"resourceId":{"type":["string","null"]},"url":{"description":"Dashboard page the notification points at","type":["string","null"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"seenAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"resolved":{"type":"boolean","description":"Its inline action (accept, decline) has been taken already"}},"required":["id","type","title","message","resourceType","resourceId","url","createdAt","seenAt","resolved"],"additionalProperties":false}}}}
```

## The Organization object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Organization":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string","description":"What calls in an organization take as org"},"name":{"type":"string"},"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role there, which bounds what they can do in it"}},"required":["id","slug","name","role"],"additionalProperties":false}}}}
```

## The OrganizationDetail object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"OrganizationDetail":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string","description":"What calls in an organization take as org"},"name":{"type":"string"},"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role there, which bounds what they can do in it"},"isOwner":{"type":"boolean","description":"The caller owns it (members.list names the owner)"},"settings":{"type":"object","properties":{"serverlessEnabled":{"type":"boolean","description":"Developers may run apps on Kinesis serverless capacity, billed to the organization; admins always can"},"membersCanInvite":{"type":"boolean","description":"Developers may invite people, as developers or viewers; admins always can"}},"required":["serverlessEnabled","membersCanInvite"],"additionalProperties":false},"frozen":{"type":"boolean","description":"Frozen over a payment problem: it can't start apps, add servers or pay"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","slug","name","role","isOwner","settings","frozen","createdAt"],"additionalProperties":false}}}}
```

## The OrgInvitation object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"OrgInvitation":{"type":"object","properties":{"id":{"type":"string","description":"Invitation id"},"org":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The role the caller would join with"},"invitedBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}]},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org","role","invitedBy","expiresAt"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The Person object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The AuditEntry object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AuditEntry":{"type":"object","properties":{"id":{"type":"string"},"at":{"type":"string","format":"date-time","description":"When it happened"},"actor":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who did it; null for the platform, or an account that is gone"},"viaSupport":{"type":"boolean","description":"Kinesis support did it while signed in as the actor"},"role":{"description":"The actor's role at the time","type":["string","null"]},"resourceType":{"type":"string","description":"project, app, pool (a grid) or org (its members, settings and servers)"},"resourceId":{"description":"Project or app id, grid id, or the organization's id","type":["string","null"]},"resourceName":{"description":"The project's or app's name, while it exists","type":["string","null"]},"action":{"type":"string","description":"What was done, e.g. appCreate, appStop, memberInvite, serverProvision"},"outcome":{"type":"string","enum":["success","error"]},"errorCode":{"description":"Why it failed, as a code; the stored message can name internals","type":["string","null"]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"What the action concerned: an app's name, a member's email and role, server addresses, ..."},"changes":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"The field, e.g. name or envVars.API_KEY"},"kind":{"type":"string","enum":["added","removed","changed"]},"before":{},"after":{},"redacted":{"description":"A secret: its values are not kept","type":"boolean"}},"required":["path","kind"],"additionalProperties":false},"description":"Field-level changes, for actions that edit fields"},"message":{"description":"For something the platform did: what it reported","type":["string","null"]}},"required":["id","at","actor","viaSupport","role","resourceType","resourceId","resourceName","action","outcome","errorCode","details","changes","message"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The Member object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Member":{"type":"object","properties":{"userId":{"type":"string","description":"What add_grantees and the member calls take"},"email":{"type":"string"},"name":{"type":["string","null"]},"role":{"type":"string","enum":["admin","developer","viewer"]},"joinedAt":{"type":"string"},"isOwner":{"type":"boolean","description":"Owns the organization: always an admin, and stays until they transfer ownership"},"lastSignInAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"With details, for admins: when they last signed in"},"created":{"anyOf":[{"type":"object","properties":{"projects":{"type":"integer"},"apps":{"type":"integer"},"grids":{"type":"integer"}},"required":["projects","apps","grids"],"additionalProperties":false},{"type":"null"}],"description":"With details, for admins: what they created here, which stays when they leave"}},"required":["userId","email","name","role","joinedAt","isOwner","lastSignInAt","created"],"additionalProperties":false}}}}
```

## The MemberInvitation object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"MemberInvitation":{"type":"object","properties":{"id":{"type":"string","description":"Invitation id"},"email":{"type":"string"},"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The role they join with"},"invitedBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}]},"expiresAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"expired":{"type":"boolean","description":"Past its date; inviting the address again sends a fresh link"},"addsTo":{"type":"array","items":{"type":"string"},"description":"Names of the projects, apps and grids they are added to on joining"}},"required":["id","email","role","invitedBy","expiresAt","expired","addsTo"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The Project object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Project":{"type":"object","properties":{"id":{"type":"string","description":"Project id"},"name":{"type":"string"},"org":{"$ref":"#/components/schemas/OrgRef"},"visibility":{"type":"string","enum":["private","org"],"description":"private: admins, its creator and the people added; org: everyone in the organization"},"access":{"$ref":"#/components/schemas/Access"},"appCount":{"type":"integer"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","org","visibility","access","appCount","createdBy","createdAt"],"additionalProperties":false},"OrgRef":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false,"description":"The organization that owns it"},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The OrgRef object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"OrgRef":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false,"description":"The organization that owns it"}}}}
```

## The Access object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false}}}}
```

## The ProjectDetail object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ProjectDetail":{"type":"object","properties":{"id":{"type":"string","description":"Project id"},"name":{"type":"string"},"org":{"$ref":"#/components/schemas/OrgRef"},"visibility":{"type":"string","enum":["private","org"],"description":"private: admins, its creator and the people added; org: everyone in the organization"},"access":{"$ref":"#/components/schemas/Access"},"appCount":{"type":"integer"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"apps":{"type":"array","items":{"$ref":"#/components/schemas/App"}}},"required":["id","name","org","visibility","access","appCount","createdBy","createdAt","apps"],"additionalProperties":false},"OrgRef":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false,"description":"The organization that owns it"},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false},"App":{"type":"object","properties":{"id":{"type":"string","description":"App id"},"projectId":{"type":"string"},"name":{"type":"string"},"guid":{"type":"string","description":"Runtime identifier of the app"},"source":{"description":"Where the image comes from: Docker Hub, a registry link, GitHub or an upload","type":["string","null"]},"image":{"type":["string","null"]},"domain":{"description":"Hostname the app answers on: the default custom domain, else the Kinesis-issued one","type":["string","null"]},"buildState":{"description":"Build pipeline state for GitHub-sourced apps","type":["string","null"]},"access":{"$ref":"#/components/schemas/Access"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","projectId","name","guid","source","image","domain","buildState","access","createdBy","createdAt"],"additionalProperties":false}}}}
```

## The App object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"App":{"type":"object","properties":{"id":{"type":"string","description":"App id"},"projectId":{"type":"string"},"name":{"type":"string"},"guid":{"type":"string","description":"Runtime identifier of the app"},"source":{"description":"Where the image comes from: Docker Hub, a registry link, GitHub or an upload","type":["string","null"]},"image":{"type":["string","null"]},"domain":{"description":"Hostname the app answers on: the default custom domain, else the Kinesis-issued one","type":["string","null"]},"buildState":{"description":"Build pipeline state for GitHub-sourced apps","type":["string","null"]},"access":{"$ref":"#/components/schemas/Access"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","projectId","name","guid","source","image","domain","buildState","access","createdBy","createdAt"],"additionalProperties":false},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The Placement object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Placement":{"type":"object","properties":{"placeable":{"type":"boolean","description":"A server can take the app now, a hibernated one would fit once woken, or one can be provisioned"},"serversWithCapacity":{"type":"integer","description":"Servers that match and have room now"},"serversWithoutCapacity":{"type":"integer","description":"Servers that match but are full"},"wakeable":{"type":"integer","description":"Hibernated servers that would match once woken (power_servers wake, or the automatic wake-up on start)"},"wakeableAwaitingStock":{"type":"integer","description":"Of wakeable, servers whose provider has no stock right now, so a wake would not land yet"},"provisionable":{"type":"boolean","description":"The platform can provision a matching cloud machine on demand for a serverless app"},"rejections":{"type":"array","items":{"type":"object","properties":{"server":{"type":"string","description":"Server address"},"reason":{"type":"string"}},"required":["server","reason"],"additionalProperties":false},"description":"Why sampled servers cannot take the app; each distinct reason appears first, then repeats"}},"required":["placeable","serversWithCapacity","serversWithoutCapacity","wakeable","wakeableAwaitingStock","provisionable","rejections"],"additionalProperties":false}}}}
```

## The AppCreateResult object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppCreateResult":{"type":"object","properties":{"id":{"type":"string","description":"App id"},"projectId":{"type":"string"},"name":{"type":"string"},"guid":{"type":"string","description":"Runtime identifier of the app"},"source":{"description":"Where the image comes from: Docker Hub, a registry link, GitHub or an upload","type":["string","null"]},"image":{"type":["string","null"]},"domain":{"description":"Hostname the app answers on: the default custom domain, else the Kinesis-issued one","type":["string","null"]},"buildState":{"description":"Build pipeline state for GitHub-sourced apps","type":["string","null"]},"access":{"$ref":"#/components/schemas/Access"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"status":{"description":"Status as last cached; use the status endpoint for a live read","$ref":"#/components/schemas/AppStatus"},"config":{"anyOf":[{"$ref":"#/components/schemas/AppConfig"},{"type":"null"}]},"github":{"anyOf":[{"$ref":"#/components/schemas/AppGitHubSource"},{"type":"null"}],"description":"Repository settings of a GitHub-sourced app"},"defaultDomain":{"description":"Custom domain shown as the app's address in the dashboard; null for the Kinesis-issued one","type":["string","null"]},"start":{"description":"How the automatic start after creation went","$ref":"#/components/schemas/AppStartOutcome"},"buildId":{"description":"First build of a GitHub-sourced app; null for image apps","type":["string","null"]}},"required":["id","projectId","name","guid","source","image","domain","buildState","access","createdBy","createdAt","status","config","github","defaultDomain","start","buildId"],"additionalProperties":false},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false},"AppStatus":{"type":"object","properties":{"state":{"type":"string","enum":["unknown","running","stopped","starting","stopping","scaling","updating","downloading","provisioning","start_blocked","error","building","build_failed"],"description":"Aggregate state; build states win while there is no runnable image"},"targetState":{"type":"string","enum":["running","stopped","unknown"],"description":"What the runtime was last asked for; unknown until it has been asked, as for a repository app before its first build succeeds"},"nodes":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"state":{"type":"string"},"reportedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the server last reported this state; not a start time"}},"required":["address","state","reportedAt"],"additionalProperties":false},"description":"Servers the app is placed on and the container state on each"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/AppEndpoint"},"description":"Where each configured port answers; a load-balanced port gets its address a minute or two after the first start"},"errors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"at":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"Extra data the runtime attached, such as the grid or server involved"}},"required":["type","message","at","details"],"additionalProperties":false},"description":"Recent runtime errors, newest first"},"workOrders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"What the runtime asked the server to do"},"server":{"type":"string","description":"Server address"},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"completedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["type","server","status","createdAt","startedAt","completedAt"],"additionalProperties":false},"description":"The runtime's latest instructions to servers, newest first; an order that never completes is the stall"},"grid":{"anyOf":[{"type":"object","properties":{"fill":{"anyOf":[{"type":"object","properties":{"target":{"type":"integer","description":"Members the grid is composed to have"},"online":{"type":"integer","description":"Members the app runs on"},"pending":{"type":"integer"},"converging":{"type":"boolean","description":"The grid is still acquiring members or placing the app"}},"required":["target","online","pending","converging"],"additionalProperties":false},{"type":"null"}],"description":"How far the grid has filled for this app"},"idleReclaim":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"warnedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"evictAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the app becomes evictable; null when the grid only warns"},"evictedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"cooldownEndsAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the grid takes the app again after an eviction"},"evidence":{"type":"string","description":"Why the grid considers the app idle"}},"required":["gridId","warnedAt","evictAt","evictedAt","cooldownEndsAt","evidence"],"additionalProperties":false},"description":"Grids whose idle policy has warned or evicted the app"},"queue":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"position":{"type":"integer","description":"1-based place in the grid's fair-share queue"},"queueLength":{"type":"integer"},"enqueuedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"held":{"type":"boolean","description":"The scheduler keeps the app off the grid until its turn comes"}},"required":["gridId","position","queueLength","enqueuedAt","held"],"additionalProperties":false},"description":"Full grids the app is queued on"}},"required":["fill","idleReclaim","queue"],"additionalProperties":false},{"type":"null"}],"description":"Grid placement details; null for a serverless app"},"pollAfterSec":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Seconds to wait before reading the status again while it is changing; null in a settled state"}},"required":["state","targetState","nodes","endpoints","errors","workOrders","grid","pollAfterSec"],"additionalProperties":false},"AppEndpoint":{"type":"object","properties":{"port":{"type":"integer","description":"Container port, as in config.ports"},"protocol":{"type":"string","description":"Protocol of that port, as in config.ports"},"address":{"description":"An http(s) URL for the HTTP protocols, host:port for the others; null until the endpoint is wired","type":["string","null"]},"server":{"description":"Server address of a direct tcp or udp endpoint; null when load-balanced","type":["string","null"]}},"required":["port","protocol","address","server"],"additionalProperties":false},"AppConfig":{"type":"object","properties":{"image":{"type":"string","description":"Container image reference"},"imageTag":{"description":"Tag, kept separately for Docker Hub images","type":["string","null"]},"registryUsername":{"description":"Registry login; the password is write-only","type":["string","null"]},"ports":{"type":"array","items":{"type":"object","properties":{"port":{"type":"integer"},"protocol":{"type":"string"}},"required":["port","protocol"],"additionalProperties":false}},"env":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":["string","null"]},"secret":{"type":"boolean"}},"required":["key","value","secret"],"additionalProperties":false},"description":"Environment variables; value is null for secrets, and on a connection that takes no credentials for values that look like one (null keeps a value on update)"},"command":{"type":"array","items":{"type":"string"}},"entrypoint":{"type":"array","items":{"type":"string"}},"startupCommand":{"anyOf":[{"type":"object","properties":{"args":{"type":"array","items":{"type":"string"}},"user":{"type":"string"},"timeoutSec":{"type":"number"},"startPeriodSec":{"type":"number"}},"required":["args","user","timeoutSec","startPeriodSec"],"additionalProperties":false},{"type":"null"}]},"healthcheck":{"anyOf":[{"type":"object","properties":{"test":{"type":"array","items":{"type":"string"}},"intervalSec":{"type":"number"}},"required":["test","intervalSec"],"additionalProperties":false},{"type":"null"}]},"restartPolicy":{"anyOf":[{"type":"object","properties":{"mode":{"type":"string"},"startTimeoutSec":{"type":"number"},"maxRetriesPerNode":{"type":"number"},"maxErrorTolerance":{"type":"number"},"numTasks":{"type":"number"}},"required":["mode","startTimeoutSec","maxRetriesPerNode","maxErrorTolerance","numTasks"],"additionalProperties":false},{"type":"null"}]},"instances":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"],"additionalProperties":false},"stateful":{"type":"boolean"},"hardware":{"type":"object","properties":{"gpuCount":{"type":"integer"},"gpuModels":{"type":"array","items":{"type":"string"}},"gpuManufacturer":{"type":["string","null"]},"gpuVramBytes":{"type":"number"},"ramBytes":{"type":"number"},"storageBytes":{"type":"number"},"shmemBytes":{"type":"number"}},"required":["gpuCount","gpuModels","gpuManufacturer","gpuVramBytes","ramBytes","storageBytes","shmemBytes"],"additionalProperties":false},"placement":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"string"},"description":"Kinesis regions, e.g. us-west"},"providers":{"type":"array","items":{"type":"object","properties":{"csp":{"type":"string"},"regions":{"type":"array","items":{"type":"object","properties":{"region":{"type":"string"},"zones":{"type":"array","items":{"type":"string"}}},"required":["region","zones"],"additionalProperties":false}}},"required":["csp","regions"],"additionalProperties":false}},"allowedIps":{"type":"array","items":{"type":"string"},"description":"Source IPs or CIDR ranges allowed to reach the app"}},"required":["regions","providers","allowedIps"],"additionalProperties":false},"grids":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"priorities":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"Priority per grid id"}},"required":["ids","priorities"],"additionalProperties":false},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"target":{"type":"string"},"declaredSizeBytes":{"type":"number"}},"required":["name","target","declaredSizeBytes"],"additionalProperties":false}},"domains":{"type":"array","items":{"type":"string"},"description":"Custom domains attached to the app (see the domain operations)"}},"required":["image","imageTag","registryUsername","ports","env","command","entrypoint","startupCommand","healthcheck","restartPolicy","instances","stateful","hardware","placement","grids","volumes","domains"],"additionalProperties":false},"AppGitHubSource":{"type":"object","properties":{"installationId":{"type":"integer","description":"GitHub App installation the repository is read through"},"repo":{"type":"string","description":"owner/name"},"url":{"type":"string"},"branch":{"type":"string","description":"Branch that is built and, with autoDeploy, followed"},"contextDir":{"type":"string"},"dockerfilePath":{"description":"Dockerfile path relative to contextDir; not used while dockerfileContent is set","type":["string","null"]},"dockerfileOverride":{"type":"boolean","description":"An inline Dockerfile (dockerfileContent) is built instead of dockerfilePath"},"dockerfileContent":{"description":"The inline Dockerfile that is built; null when the repository's own file is used","type":["string","null"]},"autoDeploy":{"type":"boolean","description":"Every push to the branch rebuilds and redeploys"},"clonedFrom":{"description":"Public repository (owner/name) the app's repository was copied from at creation; null otherwise","type":["string","null"]}},"required":["installationId","repo","url","branch","contextDir","dockerfilePath","dockerfileOverride","dockerfileContent","autoDeploy","clonedFrom"],"additionalProperties":false},"AppStartOutcome":{"type":"object","properties":{"state":{"type":"string","enum":["requested","deferred","building","failed"],"description":"requested: the start was accepted, poll the status to follow it; deferred: machines are being provisioned for the app first, poll the status; building: the app starts once its first build succeeds, poll the build; failed: the app exists but is stopped, see error"},"error":{"description":"Why the automatic start failed","type":["string","null"]}},"required":["state","error"],"additionalProperties":false}}}}
```

## The AppEndpoint object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppEndpoint":{"type":"object","properties":{"port":{"type":"integer","description":"Container port, as in config.ports"},"protocol":{"type":"string","description":"Protocol of that port, as in config.ports"},"address":{"description":"An http(s) URL for the HTTP protocols, host:port for the others; null until the endpoint is wired","type":["string","null"]},"server":{"description":"Server address of a direct tcp or udp endpoint; null when load-balanced","type":["string","null"]}},"required":["port","protocol","address","server"],"additionalProperties":false}}}}
```

## The AppStatus object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppStatus":{"type":"object","properties":{"state":{"type":"string","enum":["unknown","running","stopped","starting","stopping","scaling","updating","downloading","provisioning","start_blocked","error","building","build_failed"],"description":"Aggregate state; build states win while there is no runnable image"},"targetState":{"type":"string","enum":["running","stopped","unknown"],"description":"What the runtime was last asked for; unknown until it has been asked, as for a repository app before its first build succeeds"},"nodes":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"state":{"type":"string"},"reportedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the server last reported this state; not a start time"}},"required":["address","state","reportedAt"],"additionalProperties":false},"description":"Servers the app is placed on and the container state on each"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/AppEndpoint"},"description":"Where each configured port answers; a load-balanced port gets its address a minute or two after the first start"},"errors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"at":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"Extra data the runtime attached, such as the grid or server involved"}},"required":["type","message","at","details"],"additionalProperties":false},"description":"Recent runtime errors, newest first"},"workOrders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"What the runtime asked the server to do"},"server":{"type":"string","description":"Server address"},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"completedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["type","server","status","createdAt","startedAt","completedAt"],"additionalProperties":false},"description":"The runtime's latest instructions to servers, newest first; an order that never completes is the stall"},"grid":{"anyOf":[{"type":"object","properties":{"fill":{"anyOf":[{"type":"object","properties":{"target":{"type":"integer","description":"Members the grid is composed to have"},"online":{"type":"integer","description":"Members the app runs on"},"pending":{"type":"integer"},"converging":{"type":"boolean","description":"The grid is still acquiring members or placing the app"}},"required":["target","online","pending","converging"],"additionalProperties":false},{"type":"null"}],"description":"How far the grid has filled for this app"},"idleReclaim":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"warnedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"evictAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the app becomes evictable; null when the grid only warns"},"evictedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"cooldownEndsAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the grid takes the app again after an eviction"},"evidence":{"type":"string","description":"Why the grid considers the app idle"}},"required":["gridId","warnedAt","evictAt","evictedAt","cooldownEndsAt","evidence"],"additionalProperties":false},"description":"Grids whose idle policy has warned or evicted the app"},"queue":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"position":{"type":"integer","description":"1-based place in the grid's fair-share queue"},"queueLength":{"type":"integer"},"enqueuedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"held":{"type":"boolean","description":"The scheduler keeps the app off the grid until its turn comes"}},"required":["gridId","position","queueLength","enqueuedAt","held"],"additionalProperties":false},"description":"Full grids the app is queued on"}},"required":["fill","idleReclaim","queue"],"additionalProperties":false},{"type":"null"}],"description":"Grid placement details; null for a serverless app"},"pollAfterSec":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Seconds to wait before reading the status again while it is changing; null in a settled state"}},"required":["state","targetState","nodes","endpoints","errors","workOrders","grid","pollAfterSec"],"additionalProperties":false},"AppEndpoint":{"type":"object","properties":{"port":{"type":"integer","description":"Container port, as in config.ports"},"protocol":{"type":"string","description":"Protocol of that port, as in config.ports"},"address":{"description":"An http(s) URL for the HTTP protocols, host:port for the others; null until the endpoint is wired","type":["string","null"]},"server":{"description":"Server address of a direct tcp or udp endpoint; null when load-balanced","type":["string","null"]}},"required":["port","protocol","address","server"],"additionalProperties":false}}}}
```

## The AppConfig object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppConfig":{"type":"object","properties":{"image":{"type":"string","description":"Container image reference"},"imageTag":{"description":"Tag, kept separately for Docker Hub images","type":["string","null"]},"registryUsername":{"description":"Registry login; the password is write-only","type":["string","null"]},"ports":{"type":"array","items":{"type":"object","properties":{"port":{"type":"integer"},"protocol":{"type":"string"}},"required":["port","protocol"],"additionalProperties":false}},"env":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":["string","null"]},"secret":{"type":"boolean"}},"required":["key","value","secret"],"additionalProperties":false},"description":"Environment variables; value is null for secrets, and on a connection that takes no credentials for values that look like one (null keeps a value on update)"},"command":{"type":"array","items":{"type":"string"}},"entrypoint":{"type":"array","items":{"type":"string"}},"startupCommand":{"anyOf":[{"type":"object","properties":{"args":{"type":"array","items":{"type":"string"}},"user":{"type":"string"},"timeoutSec":{"type":"number"},"startPeriodSec":{"type":"number"}},"required":["args","user","timeoutSec","startPeriodSec"],"additionalProperties":false},{"type":"null"}]},"healthcheck":{"anyOf":[{"type":"object","properties":{"test":{"type":"array","items":{"type":"string"}},"intervalSec":{"type":"number"}},"required":["test","intervalSec"],"additionalProperties":false},{"type":"null"}]},"restartPolicy":{"anyOf":[{"type":"object","properties":{"mode":{"type":"string"},"startTimeoutSec":{"type":"number"},"maxRetriesPerNode":{"type":"number"},"maxErrorTolerance":{"type":"number"},"numTasks":{"type":"number"}},"required":["mode","startTimeoutSec","maxRetriesPerNode","maxErrorTolerance","numTasks"],"additionalProperties":false},{"type":"null"}]},"instances":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"],"additionalProperties":false},"stateful":{"type":"boolean"},"hardware":{"type":"object","properties":{"gpuCount":{"type":"integer"},"gpuModels":{"type":"array","items":{"type":"string"}},"gpuManufacturer":{"type":["string","null"]},"gpuVramBytes":{"type":"number"},"ramBytes":{"type":"number"},"storageBytes":{"type":"number"},"shmemBytes":{"type":"number"}},"required":["gpuCount","gpuModels","gpuManufacturer","gpuVramBytes","ramBytes","storageBytes","shmemBytes"],"additionalProperties":false},"placement":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"string"},"description":"Kinesis regions, e.g. us-west"},"providers":{"type":"array","items":{"type":"object","properties":{"csp":{"type":"string"},"regions":{"type":"array","items":{"type":"object","properties":{"region":{"type":"string"},"zones":{"type":"array","items":{"type":"string"}}},"required":["region","zones"],"additionalProperties":false}}},"required":["csp","regions"],"additionalProperties":false}},"allowedIps":{"type":"array","items":{"type":"string"},"description":"Source IPs or CIDR ranges allowed to reach the app"}},"required":["regions","providers","allowedIps"],"additionalProperties":false},"grids":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"priorities":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"Priority per grid id"}},"required":["ids","priorities"],"additionalProperties":false},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"target":{"type":"string"},"declaredSizeBytes":{"type":"number"}},"required":["name","target","declaredSizeBytes"],"additionalProperties":false}},"domains":{"type":"array","items":{"type":"string"},"description":"Custom domains attached to the app (see the domain operations)"}},"required":["image","imageTag","registryUsername","ports","env","command","entrypoint","startupCommand","healthcheck","restartPolicy","instances","stateful","hardware","placement","grids","volumes","domains"],"additionalProperties":false}}}}
```

## The AppGitHubSource object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppGitHubSource":{"type":"object","properties":{"installationId":{"type":"integer","description":"GitHub App installation the repository is read through"},"repo":{"type":"string","description":"owner/name"},"url":{"type":"string"},"branch":{"type":"string","description":"Branch that is built and, with autoDeploy, followed"},"contextDir":{"type":"string"},"dockerfilePath":{"description":"Dockerfile path relative to contextDir; not used while dockerfileContent is set","type":["string","null"]},"dockerfileOverride":{"type":"boolean","description":"An inline Dockerfile (dockerfileContent) is built instead of dockerfilePath"},"dockerfileContent":{"description":"The inline Dockerfile that is built; null when the repository's own file is used","type":["string","null"]},"autoDeploy":{"type":"boolean","description":"Every push to the branch rebuilds and redeploys"},"clonedFrom":{"description":"Public repository (owner/name) the app's repository was copied from at creation; null otherwise","type":["string","null"]}},"required":["installationId","repo","url","branch","contextDir","dockerfilePath","dockerfileOverride","dockerfileContent","autoDeploy","clonedFrom"],"additionalProperties":false}}}}
```

## The AppStartOutcome object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppStartOutcome":{"type":"object","properties":{"state":{"type":"string","enum":["requested","deferred","building","failed"],"description":"requested: the start was accepted, poll the status to follow it; deferred: machines are being provisioned for the app first, poll the status; building: the app starts once its first build succeeds, poll the build; failed: the app exists but is stopped, see error"},"error":{"description":"Why the automatic start failed","type":["string","null"]}},"required":["state","error"],"additionalProperties":false}}}}
```

## The AppDetail object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppDetail":{"type":"object","properties":{"id":{"type":"string","description":"App id"},"projectId":{"type":"string"},"name":{"type":"string"},"guid":{"type":"string","description":"Runtime identifier of the app"},"source":{"description":"Where the image comes from: Docker Hub, a registry link, GitHub or an upload","type":["string","null"]},"image":{"type":["string","null"]},"domain":{"description":"Hostname the app answers on: the default custom domain, else the Kinesis-issued one","type":["string","null"]},"buildState":{"description":"Build pipeline state for GitHub-sourced apps","type":["string","null"]},"access":{"$ref":"#/components/schemas/Access"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"status":{"description":"Status as last cached; use the status endpoint for a live read","$ref":"#/components/schemas/AppStatus"},"config":{"anyOf":[{"$ref":"#/components/schemas/AppConfig"},{"type":"null"}]},"github":{"anyOf":[{"$ref":"#/components/schemas/AppGitHubSource"},{"type":"null"}],"description":"Repository settings of a GitHub-sourced app"},"defaultDomain":{"description":"Custom domain shown as the app's address in the dashboard; null for the Kinesis-issued one","type":["string","null"]}},"required":["id","projectId","name","guid","source","image","domain","buildState","access","createdBy","createdAt","status","config","github","defaultDomain"],"additionalProperties":false},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false},"AppStatus":{"type":"object","properties":{"state":{"type":"string","enum":["unknown","running","stopped","starting","stopping","scaling","updating","downloading","provisioning","start_blocked","error","building","build_failed"],"description":"Aggregate state; build states win while there is no runnable image"},"targetState":{"type":"string","enum":["running","stopped","unknown"],"description":"What the runtime was last asked for; unknown until it has been asked, as for a repository app before its first build succeeds"},"nodes":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"state":{"type":"string"},"reportedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the server last reported this state; not a start time"}},"required":["address","state","reportedAt"],"additionalProperties":false},"description":"Servers the app is placed on and the container state on each"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/AppEndpoint"},"description":"Where each configured port answers; a load-balanced port gets its address a minute or two after the first start"},"errors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"at":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"Extra data the runtime attached, such as the grid or server involved"}},"required":["type","message","at","details"],"additionalProperties":false},"description":"Recent runtime errors, newest first"},"workOrders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"What the runtime asked the server to do"},"server":{"type":"string","description":"Server address"},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"completedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["type","server","status","createdAt","startedAt","completedAt"],"additionalProperties":false},"description":"The runtime's latest instructions to servers, newest first; an order that never completes is the stall"},"grid":{"anyOf":[{"type":"object","properties":{"fill":{"anyOf":[{"type":"object","properties":{"target":{"type":"integer","description":"Members the grid is composed to have"},"online":{"type":"integer","description":"Members the app runs on"},"pending":{"type":"integer"},"converging":{"type":"boolean","description":"The grid is still acquiring members or placing the app"}},"required":["target","online","pending","converging"],"additionalProperties":false},{"type":"null"}],"description":"How far the grid has filled for this app"},"idleReclaim":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"warnedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"evictAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the app becomes evictable; null when the grid only warns"},"evictedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"cooldownEndsAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the grid takes the app again after an eviction"},"evidence":{"type":"string","description":"Why the grid considers the app idle"}},"required":["gridId","warnedAt","evictAt","evictedAt","cooldownEndsAt","evidence"],"additionalProperties":false},"description":"Grids whose idle policy has warned or evicted the app"},"queue":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"position":{"type":"integer","description":"1-based place in the grid's fair-share queue"},"queueLength":{"type":"integer"},"enqueuedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"held":{"type":"boolean","description":"The scheduler keeps the app off the grid until its turn comes"}},"required":["gridId","position","queueLength","enqueuedAt","held"],"additionalProperties":false},"description":"Full grids the app is queued on"}},"required":["fill","idleReclaim","queue"],"additionalProperties":false},{"type":"null"}],"description":"Grid placement details; null for a serverless app"},"pollAfterSec":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Seconds to wait before reading the status again while it is changing; null in a settled state"}},"required":["state","targetState","nodes","endpoints","errors","workOrders","grid","pollAfterSec"],"additionalProperties":false},"AppEndpoint":{"type":"object","properties":{"port":{"type":"integer","description":"Container port, as in config.ports"},"protocol":{"type":"string","description":"Protocol of that port, as in config.ports"},"address":{"description":"An http(s) URL for the HTTP protocols, host:port for the others; null until the endpoint is wired","type":["string","null"]},"server":{"description":"Server address of a direct tcp or udp endpoint; null when load-balanced","type":["string","null"]}},"required":["port","protocol","address","server"],"additionalProperties":false},"AppConfig":{"type":"object","properties":{"image":{"type":"string","description":"Container image reference"},"imageTag":{"description":"Tag, kept separately for Docker Hub images","type":["string","null"]},"registryUsername":{"description":"Registry login; the password is write-only","type":["string","null"]},"ports":{"type":"array","items":{"type":"object","properties":{"port":{"type":"integer"},"protocol":{"type":"string"}},"required":["port","protocol"],"additionalProperties":false}},"env":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":["string","null"]},"secret":{"type":"boolean"}},"required":["key","value","secret"],"additionalProperties":false},"description":"Environment variables; value is null for secrets, and on a connection that takes no credentials for values that look like one (null keeps a value on update)"},"command":{"type":"array","items":{"type":"string"}},"entrypoint":{"type":"array","items":{"type":"string"}},"startupCommand":{"anyOf":[{"type":"object","properties":{"args":{"type":"array","items":{"type":"string"}},"user":{"type":"string"},"timeoutSec":{"type":"number"},"startPeriodSec":{"type":"number"}},"required":["args","user","timeoutSec","startPeriodSec"],"additionalProperties":false},{"type":"null"}]},"healthcheck":{"anyOf":[{"type":"object","properties":{"test":{"type":"array","items":{"type":"string"}},"intervalSec":{"type":"number"}},"required":["test","intervalSec"],"additionalProperties":false},{"type":"null"}]},"restartPolicy":{"anyOf":[{"type":"object","properties":{"mode":{"type":"string"},"startTimeoutSec":{"type":"number"},"maxRetriesPerNode":{"type":"number"},"maxErrorTolerance":{"type":"number"},"numTasks":{"type":"number"}},"required":["mode","startTimeoutSec","maxRetriesPerNode","maxErrorTolerance","numTasks"],"additionalProperties":false},{"type":"null"}]},"instances":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"],"additionalProperties":false},"stateful":{"type":"boolean"},"hardware":{"type":"object","properties":{"gpuCount":{"type":"integer"},"gpuModels":{"type":"array","items":{"type":"string"}},"gpuManufacturer":{"type":["string","null"]},"gpuVramBytes":{"type":"number"},"ramBytes":{"type":"number"},"storageBytes":{"type":"number"},"shmemBytes":{"type":"number"}},"required":["gpuCount","gpuModels","gpuManufacturer","gpuVramBytes","ramBytes","storageBytes","shmemBytes"],"additionalProperties":false},"placement":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"string"},"description":"Kinesis regions, e.g. us-west"},"providers":{"type":"array","items":{"type":"object","properties":{"csp":{"type":"string"},"regions":{"type":"array","items":{"type":"object","properties":{"region":{"type":"string"},"zones":{"type":"array","items":{"type":"string"}}},"required":["region","zones"],"additionalProperties":false}}},"required":["csp","regions"],"additionalProperties":false}},"allowedIps":{"type":"array","items":{"type":"string"},"description":"Source IPs or CIDR ranges allowed to reach the app"}},"required":["regions","providers","allowedIps"],"additionalProperties":false},"grids":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"priorities":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"Priority per grid id"}},"required":["ids","priorities"],"additionalProperties":false},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"target":{"type":"string"},"declaredSizeBytes":{"type":"number"}},"required":["name","target","declaredSizeBytes"],"additionalProperties":false}},"domains":{"type":"array","items":{"type":"string"},"description":"Custom domains attached to the app (see the domain operations)"}},"required":["image","imageTag","registryUsername","ports","env","command","entrypoint","startupCommand","healthcheck","restartPolicy","instances","stateful","hardware","placement","grids","volumes","domains"],"additionalProperties":false},"AppGitHubSource":{"type":"object","properties":{"installationId":{"type":"integer","description":"GitHub App installation the repository is read through"},"repo":{"type":"string","description":"owner/name"},"url":{"type":"string"},"branch":{"type":"string","description":"Branch that is built and, with autoDeploy, followed"},"contextDir":{"type":"string"},"dockerfilePath":{"description":"Dockerfile path relative to contextDir; not used while dockerfileContent is set","type":["string","null"]},"dockerfileOverride":{"type":"boolean","description":"An inline Dockerfile (dockerfileContent) is built instead of dockerfilePath"},"dockerfileContent":{"description":"The inline Dockerfile that is built; null when the repository's own file is used","type":["string","null"]},"autoDeploy":{"type":"boolean","description":"Every push to the branch rebuilds and redeploys"},"clonedFrom":{"description":"Public repository (owner/name) the app's repository was copied from at creation; null otherwise","type":["string","null"]}},"required":["installationId","repo","url","branch","contextDir","dockerfilePath","dockerfileOverride","dockerfileContent","autoDeploy","clonedFrom"],"additionalProperties":false}}}}
```

## The AppUpdateResult object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppUpdateResult":{"type":"object","properties":{"id":{"type":"string","description":"App id"},"projectId":{"type":"string"},"name":{"type":"string"},"guid":{"type":"string","description":"Runtime identifier of the app"},"source":{"description":"Where the image comes from: Docker Hub, a registry link, GitHub or an upload","type":["string","null"]},"image":{"type":["string","null"]},"domain":{"description":"Hostname the app answers on: the default custom domain, else the Kinesis-issued one","type":["string","null"]},"buildState":{"description":"Build pipeline state for GitHub-sourced apps","type":["string","null"]},"access":{"$ref":"#/components/schemas/Access"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"status":{"description":"Status as last cached; use the status endpoint for a live read","$ref":"#/components/schemas/AppStatus"},"config":{"anyOf":[{"$ref":"#/components/schemas/AppConfig"},{"type":"null"}]},"github":{"anyOf":[{"$ref":"#/components/schemas/AppGitHubSource"},{"type":"null"}],"description":"Repository settings of a GitHub-sourced app"},"defaultDomain":{"description":"Custom domain shown as the app's address in the dashboard; null for the Kinesis-issued one","type":["string","null"]},"buildId":{"description":"Build started by a source change; null when nothing was rebuilt","type":["string","null"]}},"required":["id","projectId","name","guid","source","image","domain","buildState","access","createdBy","createdAt","status","config","github","defaultDomain","buildId"],"additionalProperties":false},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false},"AppStatus":{"type":"object","properties":{"state":{"type":"string","enum":["unknown","running","stopped","starting","stopping","scaling","updating","downloading","provisioning","start_blocked","error","building","build_failed"],"description":"Aggregate state; build states win while there is no runnable image"},"targetState":{"type":"string","enum":["running","stopped","unknown"],"description":"What the runtime was last asked for; unknown until it has been asked, as for a repository app before its first build succeeds"},"nodes":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"state":{"type":"string"},"reportedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the server last reported this state; not a start time"}},"required":["address","state","reportedAt"],"additionalProperties":false},"description":"Servers the app is placed on and the container state on each"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/AppEndpoint"},"description":"Where each configured port answers; a load-balanced port gets its address a minute or two after the first start"},"errors":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"at":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"Extra data the runtime attached, such as the grid or server involved"}},"required":["type","message","at","details"],"additionalProperties":false},"description":"Recent runtime errors, newest first"},"workOrders":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"What the runtime asked the server to do"},"server":{"type":"string","description":"Server address"},"status":{"type":"string"},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"startedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"completedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["type","server","status","createdAt","startedAt","completedAt"],"additionalProperties":false},"description":"The runtime's latest instructions to servers, newest first; an order that never completes is the stall"},"grid":{"anyOf":[{"type":"object","properties":{"fill":{"anyOf":[{"type":"object","properties":{"target":{"type":"integer","description":"Members the grid is composed to have"},"online":{"type":"integer","description":"Members the app runs on"},"pending":{"type":"integer"},"converging":{"type":"boolean","description":"The grid is still acquiring members or placing the app"}},"required":["target","online","pending","converging"],"additionalProperties":false},{"type":"null"}],"description":"How far the grid has filled for this app"},"idleReclaim":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"warnedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"evictAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the app becomes evictable; null when the grid only warns"},"evictedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"cooldownEndsAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When the grid takes the app again after an eviction"},"evidence":{"type":"string","description":"Why the grid considers the app idle"}},"required":["gridId","warnedAt","evictAt","evictedAt","cooldownEndsAt","evidence"],"additionalProperties":false},"description":"Grids whose idle policy has warned or evicted the app"},"queue":{"type":"array","items":{"type":"object","properties":{"gridId":{"type":"string"},"position":{"type":"integer","description":"1-based place in the grid's fair-share queue"},"queueLength":{"type":"integer"},"enqueuedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"held":{"type":"boolean","description":"The scheduler keeps the app off the grid until its turn comes"}},"required":["gridId","position","queueLength","enqueuedAt","held"],"additionalProperties":false},"description":"Full grids the app is queued on"}},"required":["fill","idleReclaim","queue"],"additionalProperties":false},{"type":"null"}],"description":"Grid placement details; null for a serverless app"},"pollAfterSec":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Seconds to wait before reading the status again while it is changing; null in a settled state"}},"required":["state","targetState","nodes","endpoints","errors","workOrders","grid","pollAfterSec"],"additionalProperties":false},"AppEndpoint":{"type":"object","properties":{"port":{"type":"integer","description":"Container port, as in config.ports"},"protocol":{"type":"string","description":"Protocol of that port, as in config.ports"},"address":{"description":"An http(s) URL for the HTTP protocols, host:port for the others; null until the endpoint is wired","type":["string","null"]},"server":{"description":"Server address of a direct tcp or udp endpoint; null when load-balanced","type":["string","null"]}},"required":["port","protocol","address","server"],"additionalProperties":false},"AppConfig":{"type":"object","properties":{"image":{"type":"string","description":"Container image reference"},"imageTag":{"description":"Tag, kept separately for Docker Hub images","type":["string","null"]},"registryUsername":{"description":"Registry login; the password is write-only","type":["string","null"]},"ports":{"type":"array","items":{"type":"object","properties":{"port":{"type":"integer"},"protocol":{"type":"string"}},"required":["port","protocol"],"additionalProperties":false}},"env":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":["string","null"]},"secret":{"type":"boolean"}},"required":["key","value","secret"],"additionalProperties":false},"description":"Environment variables; value is null for secrets, and on a connection that takes no credentials for values that look like one (null keeps a value on update)"},"command":{"type":"array","items":{"type":"string"}},"entrypoint":{"type":"array","items":{"type":"string"}},"startupCommand":{"anyOf":[{"type":"object","properties":{"args":{"type":"array","items":{"type":"string"}},"user":{"type":"string"},"timeoutSec":{"type":"number"},"startPeriodSec":{"type":"number"}},"required":["args","user","timeoutSec","startPeriodSec"],"additionalProperties":false},{"type":"null"}]},"healthcheck":{"anyOf":[{"type":"object","properties":{"test":{"type":"array","items":{"type":"string"}},"intervalSec":{"type":"number"}},"required":["test","intervalSec"],"additionalProperties":false},{"type":"null"}]},"restartPolicy":{"anyOf":[{"type":"object","properties":{"mode":{"type":"string"},"startTimeoutSec":{"type":"number"},"maxRetriesPerNode":{"type":"number"},"maxErrorTolerance":{"type":"number"},"numTasks":{"type":"number"}},"required":["mode","startTimeoutSec","maxRetriesPerNode","maxErrorTolerance","numTasks"],"additionalProperties":false},{"type":"null"}]},"instances":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"],"additionalProperties":false},"stateful":{"type":"boolean"},"hardware":{"type":"object","properties":{"gpuCount":{"type":"integer"},"gpuModels":{"type":"array","items":{"type":"string"}},"gpuManufacturer":{"type":["string","null"]},"gpuVramBytes":{"type":"number"},"ramBytes":{"type":"number"},"storageBytes":{"type":"number"},"shmemBytes":{"type":"number"}},"required":["gpuCount","gpuModels","gpuManufacturer","gpuVramBytes","ramBytes","storageBytes","shmemBytes"],"additionalProperties":false},"placement":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"string"},"description":"Kinesis regions, e.g. us-west"},"providers":{"type":"array","items":{"type":"object","properties":{"csp":{"type":"string"},"regions":{"type":"array","items":{"type":"object","properties":{"region":{"type":"string"},"zones":{"type":"array","items":{"type":"string"}}},"required":["region","zones"],"additionalProperties":false}}},"required":["csp","regions"],"additionalProperties":false}},"allowedIps":{"type":"array","items":{"type":"string"},"description":"Source IPs or CIDR ranges allowed to reach the app"}},"required":["regions","providers","allowedIps"],"additionalProperties":false},"grids":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"priorities":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"},"description":"Priority per grid id"}},"required":["ids","priorities"],"additionalProperties":false},"volumes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"target":{"type":"string"},"declaredSizeBytes":{"type":"number"}},"required":["name","target","declaredSizeBytes"],"additionalProperties":false}},"domains":{"type":"array","items":{"type":"string"},"description":"Custom domains attached to the app (see the domain operations)"}},"required":["image","imageTag","registryUsername","ports","env","command","entrypoint","startupCommand","healthcheck","restartPolicy","instances","stateful","hardware","placement","grids","volumes","domains"],"additionalProperties":false},"AppGitHubSource":{"type":"object","properties":{"installationId":{"type":"integer","description":"GitHub App installation the repository is read through"},"repo":{"type":"string","description":"owner/name"},"url":{"type":"string"},"branch":{"type":"string","description":"Branch that is built and, with autoDeploy, followed"},"contextDir":{"type":"string"},"dockerfilePath":{"description":"Dockerfile path relative to contextDir; not used while dockerfileContent is set","type":["string","null"]},"dockerfileOverride":{"type":"boolean","description":"An inline Dockerfile (dockerfileContent) is built instead of dockerfilePath"},"dockerfileContent":{"description":"The inline Dockerfile that is built; null when the repository's own file is used","type":["string","null"]},"autoDeploy":{"type":"boolean","description":"Every push to the branch rebuilds and redeploys"},"clonedFrom":{"description":"Public repository (owner/name) the app's repository was copied from at creation; null otherwise","type":["string","null"]}},"required":["installationId","repo","url","branch","contextDir","dockerfilePath","dockerfileOverride","dockerfileContent","autoDeploy","clonedFrom"],"additionalProperties":false}}}}
```

## The AppLogs object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppLogs":{"type":"object","properties":{"logs":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Server address the lines came from"},"from":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"to":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"lines":{"type":"array","items":{"type":"string"}}},"required":["node","from","to","lines"],"additionalProperties":false},"description":"Chunks in chronological order, consecutive lines from one server merged into a chunk that from and to span; the last line of the last chunk is the newest"},"nextCursorNs":{"description":"Pass as cursorNs to fetch the next page in the same direction; null at the end","type":["string","null"]},"hasMore":{"type":"boolean"},"totalLines":{"type":"integer","description":"Lines in this page across every chunk"}},"required":["logs","nextCursorNs","hasMore","totalLines"],"additionalProperties":false}}}}
```

## The AppUsage object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppUsage":{"type":"object","properties":{"start":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"end":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"intervalSeconds":{"type":"integer","description":"Width of each bucket"},"series":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Server address"},"points":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"Bucket start"},"cpuNs":{"type":"number","description":"CPU time consumed, in nanoseconds"},"gpuNs":{"type":"number","description":"GPU time consumed, in nanoseconds"},"gpuMemBytesSecs":{"type":"number","description":"GPU memory held, in byte-seconds"},"memBytesSecs":{"type":"number","description":"RAM held, in byte-seconds"},"storageBytesSecs":{"type":"number","description":"Disk held, in byte-seconds"},"logStorageBytesSecs":{"type":"number","description":"Log storage held, in byte-seconds"},"bwInBytes":{"type":"number","description":"Bytes received"},"bwOutBytes":{"type":"number","description":"Bytes sent"}},"required":["at","cpuNs","gpuNs","gpuMemBytesSecs","memBytesSecs","storageBytesSecs","logStorageBytesSecs","bwInBytes","bwOutBytes"],"additionalProperties":false}}},"required":["node","points"],"additionalProperties":false},"description":"One series per server the app ran on; each point sums the bucket"}},"required":["start","end","intervalSeconds","series"],"additionalProperties":false}}}}
```

## The LogRetention object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"LogRetention":{"type":"object","properties":{"days":{"type":"integer","description":"How many days of container logs are kept"},"isDefault":{"type":"boolean","description":"The platform default applies; no per-app setting"}},"required":["days","isDefault"],"additionalProperties":false}}}}
```

## The Build object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Build":{"type":"object","properties":{"id":{"type":"string","description":"Build id"},"appId":{"type":"string"},"status":{"type":"string","enum":["pending","running","succeeded","failed","cancelled"],"description":"running until the image is built and the app deployed"},"step":{"type":"string","enum":["vcs_import","image_build","app_deploy","completed"],"description":"Pipeline step in progress, or completed"},"imageBuildStatus":{"description":"The image builder's own status (Created, Running, Completed, Failed, Canceled, TimedOut) once that step started","type":["string","null"]},"source":{"anyOf":[{"type":"object","properties":{"repo":{"type":["string","null"]},"branch":{"type":["string","null"]},"commitSha":{"type":["string","null"]},"commitMessage":{"type":["string","null"]},"contextDir":{"type":["string","null"]},"dockerfilePath":{"type":["string","null"]}},"required":["repo","branch","commitSha","commitMessage","contextDir","dockerfilePath"],"additionalProperties":false},{"type":"null"}],"description":"What was built; the commit is filled in once the build starts"},"error":{"anyOf":[{"type":"object","properties":{"step":{"type":"string","description":"Step the build failed at"},"message":{"type":"string"},"code":{"type":["string","null"]}},"required":["step","message","code"],"additionalProperties":false},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"startedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"finishedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"pollAfterSec":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Seconds to wait before reading the build again; null once it has finished"}},"required":["id","appId","status","step","imageBuildStatus","source","error","createdAt","startedAt","finishedAt","pollAfterSec"],"additionalProperties":false}}}}
```

## The BuildLogs object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"BuildLogs":{"type":"object","properties":{"id":{"type":"string","description":"Build id"},"status":{"type":"string","enum":["pending","running","succeeded","failed","cancelled"]},"imageBuildStatus":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"string"},"description":"Builder output, oldest first"},"complete":{"type":"boolean","description":"The image build has finished, so the log is final"},"truncated":{"type":"boolean","description":"Older lines were dropped to keep the last 2000"}},"required":["id","status","imageBuildStatus","lines","complete","truncated"],"additionalProperties":false}}}}
```

## The DnsRecord object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"DnsRecord":{"type":"object","properties":{"type":{"type":"string","description":"Record type, e.g. CNAME or NS"},"name":{"type":"string","description":"Record name to create"},"value":{"type":"string","description":"Record value"}},"required":["type","name","value"],"additionalProperties":false}}}}
```

## The GitHubAccount object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"GitHubAccount":{"type":"object","properties":{"installationId":{"type":"integer","description":"Installation id to pass to the other GitHub operations"},"login":{"type":"string","description":"GitHub user or organization name"},"type":{"type":"string","enum":["user","organization"]},"avatarUrl":{"type":["string","null"]}},"required":["installationId","login","type","avatarUrl"],"additionalProperties":false}}}}
```

## The GitHubRepo object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"GitHubRepo":{"type":"object","properties":{"id":{"type":"integer","description":"GitHub's numeric repository id"},"name":{"type":"string","description":"owner/name"},"defaultBranch":{"type":"string"},"private":{"type":"boolean"},"url":{"type":"string"},"description":{"type":["string","null"]},"language":{"type":["string","null"]},"updatedAt":{"type":"string","description":"Last push or change, ISO 8601"}},"required":["id","name","defaultBranch","private","url","description","language","updatedAt"],"additionalProperties":false}}}}
```

## The GitHubCommit object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"GitHubCommit":{"type":"object","properties":{"sha":{"type":"string"},"message":{"type":"string","description":"First line of the commit message"},"author":{"type":"string","description":"GitHub login of the author; empty when unknown"},"committedAt":{"type":"string","description":"ISO 8601; empty when unknown"}},"required":["sha","message","author","committedAt"],"additionalProperties":false}}}}
```

## The GitHubEntry object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"GitHubEntry":{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string","description":"Relative to the repository root"},"type":{"type":"string","enum":["file","dir","symlink","submodule"]},"size":{"type":"integer","description":"Bytes; 0 for a directory"}},"required":["name","path","type","size"],"additionalProperties":false}}}}
```

## The AppTemplate object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AppTemplate":{"type":"object","properties":{"id":{"type":"string","description":"Template id"},"name":{"type":"string","description":"Suggested app name"},"category":{"type":"string","enum":["llm_general","llm_performance","general"]},"image":{"description":"Container image the template deploys","type":["string","null"]},"paidTierOnly":{"type":"boolean","description":"Meant for organizations with a payment on record"},"notes":{"description":"What to fill in before deploying, when the template is not complete as is","type":["string","null"]},"config":{"type":"object","properties":{"image":{"description":"Container image reference, e.g. nginx:1.27 or ghcr.io/org/app:tag","type":"string","minLength":1,"maxLength":512},"registryAuth":{"description":"Credentials for a private image","type":"object","properties":{"username":{"type":"string","minLength":1,"description":"Registry login"},"password":{"type":"string","minLength":1,"description":"Registry password or token (write-only)"}},"required":["username","password"],"additionalProperties":false},"ports":{"description":"Ports to expose","maxItems":32,"type":"array","items":{"type":"object","properties":{"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Container port"},"protocol":{"type":"string","enum":["tcp","udp","tcp_load_balancer","tcps_load_balancer","http_load_balancer","https_load_balancer","http80_load_balancer","https443_load_balancer","grpcs_load_balancer"],"description":"How the port is exposed"}},"required":["port","protocol"],"additionalProperties":false}},"env":{"description":"Environment variables","maxItems":200,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Variable name"},"value":{"description":"Value; null keeps the stored value of an existing variable","type":["string","null"]},"secret":{"description":"Store as a secret: never returned by reads","type":"boolean"}},"required":["key","value"],"additionalProperties":false}},"command":{"description":"Container command (CMD) override","maxItems":256,"type":"array","items":{"type":"string"}},"entrypoint":{"description":"Container entrypoint override","maxItems":256,"type":"array","items":{"type":"string"}},"startupCommand":{"description":"Command run inside the container once it starts; null clears it","anyOf":[{"type":"object","properties":{"args":{"minItems":1,"type":"array","items":{"type":"string"},"description":"Command and arguments"},"user":{"description":"User to run as","type":"string"},"timeoutSec":{"description":"Seconds before the command is considered failed","type":"integer","minimum":0},"startPeriodSec":{"description":"Seconds to wait after the container starts","type":"integer","minimum":0}},"required":["args"],"additionalProperties":false},{"type":"null"}]},"healthcheck":{"description":"Container health check; null clears it","anyOf":[{"type":"object","properties":{"test":{"minItems":1,"type":"array","items":{"type":"string"},"description":"Command that must exit 0 for the app to count as healthy"},"intervalSec":{"type":"integer","minimum":1,"description":"Seconds between checks"}},"required":["test","intervalSec"],"additionalProperties":false},{"type":"null"}]},"restartPolicy":{"description":"Restart behaviour","type":"object","properties":{"mode":{"type":"string","enum":["disabled","always","on_failure","task_completion"],"description":"When to restart a container that exits"},"startTimeoutSec":{"description":"Seconds a start may take before it counts as failed","type":"integer","minimum":0},"maxRetriesPerNode":{"description":"Restarts allowed on one server before moving on","type":"integer","minimum":0},"maxErrorTolerance":{"description":"Failures tolerated before the app is stopped","type":"integer","minimum":0},"numTasks":{"description":"For task_completion: runs to complete before stopping","type":"integer","minimum":0}},"required":["mode"],"additionalProperties":false},"instances":{"description":"Instance count range","type":"object","properties":{"min":{"type":"integer","minimum":0,"description":"Instances to keep running"},"max":{"type":"integer","minimum":0,"description":"Upper bound for scaling"}},"required":["min","max"],"additionalProperties":false},"stateful":{"description":"Keep each instance pinned to its server and disk","type":"boolean"},"hardware":{"description":"Hardware requirements per instance","type":"object","properties":{"gpuCount":{"description":"GPUs per instance; 0 for CPU-only. Above 0 needs grids.ids: serverless placement is CPU-only","type":"integer","minimum":0,"maximum":16},"gpuModels":{"description":"Acceptable GPU models, e.g. H100; empty means any","maxItems":16,"type":"array","items":{"type":"string","minLength":1}},"gpuManufacturer":{"description":"GPU vendor; null means any","anyOf":[{"type":"string","enum":["amd","apple","intel","nvidia","xilinx"]},{"type":"null"}]},"gpuVramBytes":{"description":"Minimum VRAM per GPU, in bytes","type":"integer","minimum":0},"ramBytes":{"description":"RAM per instance, in bytes","type":"integer","exclusiveMinimum":0},"storageBytes":{"description":"Disk per instance, in bytes","type":"integer","exclusiveMinimum":0},"shmemBytes":{"description":"Shared memory (/dev/shm) size, in bytes","type":"integer","minimum":0}},"additionalProperties":false},"placement":{"description":"Where the app may run and who may reach it","type":"object","properties":{"regions":{"description":"Kinesis regions to run in; empty means any","type":"array","items":{"type":"string","enum":["us-west","us-east","us-central","ca-west","ca-east","ca-central","eu-west","eu-north","eu-east","eu-south","eu-central","eu-south-east","ap-east","ap-south-east","ap-north-east","ap-south"]}},"providers":{"description":"Restrict placement to specific providers and regions","type":"array","items":{"type":"object","properties":{"csp":{"type":"string","enum":["aws","azure","gcp","kinesis"],"description":"Cloud provider"},"regions":{"type":"array","items":{"type":"object","properties":{"region":{"type":"string","minLength":1,"description":"Provider region"},"zones":{"type":"array","items":{"type":"string"},"description":"Zones within the region; empty means any"}},"required":["region","zones"],"additionalProperties":false},"description":"Regions of the provider to allow"}},"required":["csp","regions"],"additionalProperties":false}},"allowedIps":{"description":"Source IPs or CIDR ranges allowed to reach the app; empty means everyone","maxItems":100,"type":"array","items":{"type":"string"}}},"additionalProperties":false},"grids":{"description":"Run on grids instead of serverless capacity (members only, on grids they may deploy to)","type":"object","properties":{"ids":{"description":"Grids to run on; empty means serverless (CPU-only), so a GPU app names at least one","maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"priorities":{"description":"Priority per grid id, -100 to 100","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-100,"maximum":100}}},"additionalProperties":false},"volumes":{"description":"Persistent volumes","maxItems":4,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]{1,63}$","description":"Volume name, unique within the app"},"target":{"type":"string","pattern":"^\\/.+","description":"Absolute mount path inside the container"},"declaredSizeBytes":{"description":"Expected size, used for placement; 0 or omitted means unspecified","type":"integer","minimum":0,"maximum":17592186044416}},"required":["name","target"],"additionalProperties":false}}},"additionalProperties":false,"description":"Pass as config to apps.create, edited as needed"}},"required":["id","name","category","image","paidTierOnly","notes","config"],"additionalProperties":false}}}}
```

## The GranteeList object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"GranteeList":{"type":"object","properties":{"resourceType":{"type":"string","enum":["project","app","grid"],"description":"What is shared"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"callerRole":{"type":"string","enum":["viewer","editor","owner"],"description":"Legacy permission values: owner means an organization admin; editor means the member who created the resource"},"grantees":{"type":"array","items":{"$ref":"#/components/schemas/Grantee"}}},"required":["resourceType","resourceId","resourceName","callerRole","grantees"],"additionalProperties":false},"Grantee":{"type":"object","properties":{"userId":{"type":"string","description":"User id; what update and revoke take"},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"],"description":"Resource grant values: viewer reads; editor means Developer. Grids take viewer for use only; organization developers may deploy and viewers only read"},"orgRole":{"anyOf":[{"type":"string","enum":["admin","developer","viewer"]},{"type":"null"}],"description":"Their role in the resource's organization; null for someone outside it"},"grantedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["userId","email","name","role","orgRole","grantedAt"],"additionalProperties":false}}}}
```

## The Grantee object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Grantee":{"type":"object","properties":{"userId":{"type":"string","description":"User id; what update and revoke take"},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"],"description":"Resource grant values: viewer reads; editor means Developer. Grids take viewer for use only; organization developers may deploy and viewers only read"},"orgRole":{"anyOf":[{"type":"string","enum":["admin","developer","viewer"]},{"type":"null"}],"description":"Their role in the resource's organization; null for someone outside it"},"grantedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["userId","email","name","role","orgRole","grantedAt"],"additionalProperties":false}}}}
```

## The Invitation object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Invitation":{"type":"object","properties":{"id":{"type":"string","description":"Invitation id"},"resourceType":{"type":"string","enum":["project","app","grid"],"description":"What is shared"},"resourceId":{"type":"string"},"resourceName":{"type":"string"},"inviteeEmail":{"type":"string"},"invitedByEmail":{"type":"string","description":"Who sent it"},"role":{"type":"string","enum":["viewer","editor"],"description":"Resource grant values: viewer reads; editor means Developer. Grids take viewer for use only; organization developers may deploy and viewers only read"},"status":{"type":"string","enum":["pending","accepted","rejected"]},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"acceptedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["id","resourceType","resourceId","resourceName","inviteeEmail","invitedByEmail","role","status","createdAt","acceptedAt"],"additionalProperties":false}}}}
```

## The Grid object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Grid":{"type":"object","properties":{"id":{"type":"string","description":"Grid id"},"name":{"type":"string"},"org":{"$ref":"#/components/schemas/OrgRef"},"access":{"$ref":"#/components/schemas/Access"},"visibility":{"type":"string","enum":["private","org"],"description":"private: admins, its creator and the people added; org: everyone in the organization"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"nodes":{"type":"array","items":{"type":"string"},"description":"Addresses of the servers in the grid"},"autoCreated":{"type":"boolean","description":"Created by the platform rather than the user"},"priorityMode":{"type":"string","enum":["absolute","weighted"],"description":"How app priorities apply when the grid is contended"},"needsReconciliation":{"type":"boolean","description":"Membership changes are still being applied"},"volumes":{"type":"array","items":{"type":"object","properties":{"mountPath":{"type":"string"},"maxSize":{"type":"number"},"tag":{"type":"string"}},"required":["mountPath","maxSize","tag"],"additionalProperties":false}},"networks":{"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"tag":{"type":"string"}},"required":["cidr","tag"],"additionalProperties":false}}},"required":["id","name","org","access","visibility","createdBy","nodes","autoCreated","priorityMode","needsReconciliation","volumes","networks"],"additionalProperties":false},"OrgRef":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false,"description":"The organization that owns it"},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The GridCreateResult object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"GridCreateResult":{"type":"object","properties":{"id":{"type":"string","description":"Grid id"},"name":{"type":"string"},"org":{"$ref":"#/components/schemas/OrgRef"},"access":{"$ref":"#/components/schemas/Access"},"visibility":{"type":"string","enum":["private","org"],"description":"private: admins, its creator and the people added; org: everyone in the organization"},"createdBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who created it. Null when nobody is on record, for another organization's, and for a credential without members:read"},"nodes":{"type":"array","items":{"type":"string"},"description":"Addresses of the servers in the grid"},"autoCreated":{"type":"boolean","description":"Created by the platform rather than the user"},"priorityMode":{"type":"string","enum":["absolute","weighted"],"description":"How app priorities apply when the grid is contended"},"needsReconciliation":{"type":"boolean","description":"Membership changes are still being applied"},"volumes":{"type":"array","items":{"type":"object","properties":{"mountPath":{"type":"string"},"maxSize":{"type":"number"},"tag":{"type":"string"}},"required":["mountPath","maxSize","tag"],"additionalProperties":false}},"networks":{"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"tag":{"type":"string"}},"required":["cidr","tag"],"additionalProperties":false}},"warning":{"description":"Set when the grid was created but a follow-up step failed","type":["string","null"]}},"required":["id","name","org","access","visibility","createdBy","nodes","autoCreated","priorityMode","needsReconciliation","volumes","networks","warning"],"additionalProperties":false},"OrgRef":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false,"description":"The organization that owns it"},"Access":{"type":"object","properties":{"role":{"type":"string","enum":["admin","developer","viewer"],"description":"The caller's role on it"},"outside":{"type":"boolean","description":"Shared with the caller from another organization"},"isCreator":{"type":"boolean","description":"The caller created it"}},"required":["role","outside","isCreator"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The Server object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Server":{"type":"object","properties":{"address":{"type":"string","description":"Server (node) address"},"name":{"description":"Display name: the caller's own name for the server when set; else, for a server rented from the marketplace, its hardware and Kinesis region; else the hostname","type":["string","null"]},"hostname":{"description":"Null for servers rented from the marketplace","type":["string","null"]},"csp":{"description":"Cloud provider; null for servers rented from the marketplace","type":["string","null"]},"region":{"description":"Provider region; null for servers rented from the marketplace","type":["string","null"]},"zone":{"description":"Provider zone; null for servers rented from the marketplace","type":["string","null"]},"instanceType":{"description":"Provider instance type; null for servers rented from the marketplace","type":["string","null"]},"kcRegion":{"description":"Kinesis region the server serves, e.g. us-west","type":["string","null"]},"owned":{"type":"boolean","description":"The organization owns this server (false for servers seen through a shared grid)"},"ownerName":{"description":"The organization that owns it; null for rented servers","type":["string","null"]},"addedBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who added it to the organization. Null when nobody is on record, for another organization's server, and for a credential without members:read"},"state":{"type":"string"},"hibernation":{"type":"string","description":"active, hibernated, hibernating or waking"},"lastPulseAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"specs":{"type":"object","properties":{"cpuThreads":{"type":"number"},"ramBytes":{"type":"number"},"storageBytes":{"type":"number"},"gpus":{"type":"array","items":{"type":"object","properties":{"model":{"type":"string"},"count":{"type":"number"},"vramBytes":{"type":"number"}},"required":["model","count","vramBytes"],"additionalProperties":false}}},"required":["cpuThreads","ramBytes","storageBytes","gpus"],"additionalProperties":false},"utilization":{"type":"object","properties":{"cpu":{"type":"number"},"ram":{"type":"number"},"storage":{"type":"number"},"gpu":{"type":"number"},"vram":{"type":"number"}},"required":["cpu","ram","storage","gpu","vram"],"additionalProperties":false,"description":"Percentages from the last pulse"},"runningApps":{"type":"integer"},"lease":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"gridId":{"type":"string"},"availableUntil":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"priceCentsPerHour":{"type":"number"}},"required":["id","gridId","availableUntil","priceCentsPerHour"],"additionalProperties":false},{"type":"null"}],"description":"Spot lease, for servers rented from the marketplace"},"provisionStatus":{"description":"Provisioning order status while the server is being created","type":["string","null"]},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["address","name","hostname","csp","region","zone","instanceType","kcRegion","owned","ownerName","addedBy","state","hibernation","lastPulseAt","specs","utilization","runningApps","lease","provisionStatus","createdAt"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The PendingServer object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"PendingServer":{"type":"object","properties":{"orderId":{"type":"string","description":"Provisioning order id"},"address":{"description":"Server address once the machine has registered; null while it is still being created","type":["string","null"]},"status":{"type":"string"},"failure":{"description":"Failure category when the order is failing","type":["string","null"]},"csp":{"type":["string","null"]},"region":{"type":["string","null"]},"instanceType":{"type":["string","null"]},"gridIds":{"type":"array","items":{"type":"string"},"description":"Grids the server joins once it registers"},"attempts":{"type":"object","properties":{"made":{"type":"integer"},"max":{"type":"integer"}},"required":["made","max"],"additionalProperties":false},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["orderId","address","status","failure","csp","region","instanceType","gridIds","attempts","createdAt"],"additionalProperties":false}}}}
```

## The ProvisionResult object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ProvisionResult":{"type":"object","properties":{"dryRun":{"type":"boolean"},"csp":{"type":"string"},"region":{"type":"string"},"instanceType":{"type":"string"},"count":{"type":"integer"},"estimate":{"$ref":"#/components/schemas/RunwayEstimate"},"orders":{"type":"array","items":{"$ref":"#/components/schemas/ProvisionOrder"},"description":"Empty for a dry run"}},"required":["dryRun","csp","region","instanceType","count","estimate","orders"],"additionalProperties":false},"RunwayEstimate":{"type":"object","properties":{"instanceCount":{"type":"integer"},"totalHourlyCostCents":{"type":"number","description":"Hourly cost of the whole order"},"totalRequiredCents":{"type":"number","description":"Balance needed to cover the minimum runtime"},"minimumHours":{"type":"number","description":"Hours of runtime the balance must cover before an order is accepted"},"balanceCents":{"type":"number"},"overLimitCents":{"type":"number"},"availableRunwayCents":{"type":"number","description":"Balance plus the over-limit allowance"},"topUpNeededCents":{"type":"number","description":"0 when the balance suffices"}},"required":["instanceCount","totalHourlyCostCents","totalRequiredCents","minimumHours","balanceCents","overLimitCents","availableRunwayCents","topUpNeededCents"],"additionalProperties":false},"ProvisionOrder":{"type":"object","properties":{"orderId":{"type":"string","description":"Provisioning order id"},"status":{"type":"string"},"count":{"type":"integer","description":"Servers in the order"},"csp":{"type":["string","null"]},"failure":{"description":"Failure category when the order is failing","type":["string","null"]},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"dismissed":{"type":"boolean","description":"Hidden from the pending list (servers.orders.dismiss)"}},"required":["orderId","status","count","csp","failure","createdAt","updatedAt","dismissed"],"additionalProperties":false}}}}
```

## The RunwayEstimate object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"RunwayEstimate":{"type":"object","properties":{"instanceCount":{"type":"integer"},"totalHourlyCostCents":{"type":"number","description":"Hourly cost of the whole order"},"totalRequiredCents":{"type":"number","description":"Balance needed to cover the minimum runtime"},"minimumHours":{"type":"number","description":"Hours of runtime the balance must cover before an order is accepted"},"balanceCents":{"type":"number"},"overLimitCents":{"type":"number"},"availableRunwayCents":{"type":"number","description":"Balance plus the over-limit allowance"},"topUpNeededCents":{"type":"number","description":"0 when the balance suffices"}},"required":["instanceCount","totalHourlyCostCents","totalRequiredCents","minimumHours","balanceCents","overLimitCents","availableRunwayCents","topUpNeededCents"],"additionalProperties":false}}}}
```

## The ProvisionOrder object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ProvisionOrder":{"type":"object","properties":{"orderId":{"type":"string","description":"Provisioning order id"},"status":{"type":"string"},"count":{"type":"integer","description":"Servers in the order"},"csp":{"type":["string","null"]},"failure":{"description":"Failure category when the order is failing","type":["string","null"]},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"dismissed":{"type":"boolean","description":"Hidden from the pending list (servers.orders.dismiss)"}},"required":["orderId","status","count","csp","failure","createdAt","updatedAt","dismissed"],"additionalProperties":false}}}}
```

## The ServerActionResult object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ServerActionResult":{"type":"object","properties":{"address":{"type":"string"},"ok":{"type":"boolean"},"error":{"type":["string","null"]}},"required":["address","ok","error"],"additionalProperties":false}}}}
```

## The PowerActionResult object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"PowerActionResult":{"type":"object","properties":{"address":{"type":"string"},"ok":{"type":"boolean"},"error":{"type":["string","null"]},"reason":{"anyOf":[{"type":"string","enum":["out_of_stock","not_hibernatable","not_active","unknown"]},{"type":"null"}],"description":"Why the request was refused or failed: out_of_stock means retry later; not_hibernatable and not_active are screened before the backend is asked"}},"required":["address","ok","error","reason"],"additionalProperties":false}}}}
```

## The ProvisionOrderDetail object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ProvisionOrderDetail":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/ProvisionOrder"},"instances":{"type":"array","items":{"$ref":"#/components/schemas/PendingServer"},"description":"One entry per machine in the order; address is set once the machine has registered"},"done":{"type":"boolean","description":"The order reached a terminal state: complete, failed or cancelled"}},"required":["order","instances","done"],"additionalProperties":false},"ProvisionOrder":{"type":"object","properties":{"orderId":{"type":"string","description":"Provisioning order id"},"status":{"type":"string"},"count":{"type":"integer","description":"Servers in the order"},"csp":{"type":["string","null"]},"failure":{"description":"Failure category when the order is failing","type":["string","null"]},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"dismissed":{"type":"boolean","description":"Hidden from the pending list (servers.orders.dismiss)"}},"required":["orderId","status","count","csp","failure","createdAt","updatedAt","dismissed"],"additionalProperties":false},"PendingServer":{"type":"object","properties":{"orderId":{"type":"string","description":"Provisioning order id"},"address":{"description":"Server address once the machine has registered; null while it is still being created","type":["string","null"]},"status":{"type":"string"},"failure":{"description":"Failure category when the order is failing","type":["string","null"]},"csp":{"type":["string","null"]},"region":{"type":["string","null"]},"instanceType":{"type":["string","null"]},"gridIds":{"type":"array","items":{"type":"string"},"description":"Grids the server joins once it registers"},"attempts":{"type":"object","properties":{"made":{"type":"integer"},"max":{"type":"integer"}},"required":["made","max"],"additionalProperties":false},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["orderId","address","status","failure","csp","region","instanceType","gridIds","attempts","createdAt"],"additionalProperties":false}}}}
```

## The ByodToken object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ByodToken":{"type":"object","properties":{"token":{"type":"string","description":"Provision token; single use"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"needVpn":{"type":"boolean","description":"The machine joins through Kinesis Remote Reach (VPN-backed)"},"expiresInSec":{"type":"integer"},"installCommand":{"type":"string","description":"Run this on the machine as root; it installs the agent and registers it"}},"required":["token","expiresAt","needVpn","expiresInSec","installCommand"],"additionalProperties":false}}}}
```

## The ServerDetail object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ServerDetail":{"type":"object","properties":{"address":{"type":"string","description":"Server (node) address"},"name":{"description":"Display name: the caller's own name for the server when set; else, for a server rented from the marketplace, its hardware and Kinesis region; else the hostname","type":["string","null"]},"hostname":{"description":"Null for servers rented from the marketplace","type":["string","null"]},"csp":{"description":"Cloud provider; null for servers rented from the marketplace","type":["string","null"]},"region":{"description":"Provider region; null for servers rented from the marketplace","type":["string","null"]},"zone":{"description":"Provider zone; null for servers rented from the marketplace","type":["string","null"]},"instanceType":{"description":"Provider instance type; null for servers rented from the marketplace","type":["string","null"]},"kcRegion":{"description":"Kinesis region the server serves, e.g. us-west","type":["string","null"]},"owned":{"type":"boolean","description":"The organization owns this server (false for servers seen through a shared grid)"},"ownerName":{"description":"The organization that owns it; null for rented servers","type":["string","null"]},"addedBy":{"anyOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}],"description":"Who added it to the organization. Null when nobody is on record, for another organization's server, and for a credential without members:read"},"state":{"type":"string"},"hibernation":{"type":"string","description":"active, hibernated, hibernating or waking"},"lastPulseAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"specs":{"type":"object","properties":{"cpuThreads":{"type":"number"},"ramBytes":{"type":"number"},"storageBytes":{"type":"number"},"gpus":{"type":"array","items":{"type":"object","properties":{"model":{"type":"string"},"count":{"type":"number"},"vramBytes":{"type":"number"}},"required":["model","count","vramBytes"],"additionalProperties":false}}},"required":["cpuThreads","ramBytes","storageBytes","gpus"],"additionalProperties":false},"utilization":{"type":"object","properties":{"cpu":{"type":"number"},"ram":{"type":"number"},"storage":{"type":"number"},"gpu":{"type":"number"},"vram":{"type":"number"}},"required":["cpu","ram","storage","gpu","vram"],"additionalProperties":false,"description":"Percentages from the last pulse"},"runningApps":{"type":"integer"},"lease":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"gridId":{"type":"string"},"availableUntil":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"priceCentsPerHour":{"type":"number"}},"required":["id","gridId","availableUntil","priceCentsPerHour"],"additionalProperties":false},{"type":"null"}],"description":"Spot lease, for servers rented from the marketplace"},"provisionStatus":{"description":"Provisioning order status while the server is being created","type":["string","null"]},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"ipAddress":{"description":"Public address; null unless the server belongs to the selected organization","type":["string","null"]},"version":{"description":"Agent version the server runs","type":["string","null"]},"countryCode":{"type":["string","null"]},"autoWakeup":{"type":"boolean","description":"The platform wakes the server when an app needs it"},"gridIds":{"type":"array","items":{"type":"string"},"description":"Grids the server belongs to, among those the caller can see"},"apps":{"type":"array","items":{"type":"object","properties":{"guid":{"type":"string","description":"Runtime identifier of the app (list_apps shows it as guid)"},"image":{"type":["string","null"]},"state":{"type":"string","description":"Container state on this server"},"targetState":{"type":"string","enum":["running","stopped","unknown"]},"reportedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["guid","image","state","targetState","reportedAt"],"additionalProperties":false},"description":"Apps placed on the server and their container state there"},"order":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Provisioning order id"},"status":{"type":"string"},"failure":{"type":["string","null"]},"attempts":{"type":"object","properties":{"made":{"type":"integer"},"max":{"type":"integer"}},"required":["made","max"],"additionalProperties":false},"awaitingStockSince":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"Set while a wake waits for provider stock"}},"required":["id","status","failure","attempts","awaitingStockSince"],"additionalProperties":false},{"type":"null"}],"description":"The provisioning order behind a Kinesis-provisioned server; null for an attached machine"}},"required":["address","name","hostname","csp","region","zone","instanceType","kcRegion","owned","ownerName","addedBy","state","hibernation","lastPulseAt","specs","utilization","runningApps","lease","provisionStatus","createdAt","ipAddress","version","countryCode","autoWakeup","gridIds","apps","order"],"additionalProperties":false},"Person":{"type":"object","properties":{"userId":{"type":"string","description":"User id, as members.list and the sharing calls use it"},"name":{"type":["string","null"]},"email":{"type":"string"}},"required":["userId","name","email"],"additionalProperties":false}}}}
```

## The ServerLogs object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"ServerLogs":{"type":"object","properties":{"logs":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"source":{"type":"string","description":"Component that wrote the line, e.g. the agent, the runtime, GPU setup"},"level":{"type":"string","enum":["trace","info","warning","error","unknown"]},"text":{"type":"string"}},"required":["at","source","level","text"],"additionalProperties":false},"description":"Oldest to newest; the last line is the most recent"},"truncated":{"type":"boolean","description":"The window holds more lines than limit; the oldest were dropped (pass until to read further back)"}},"required":["logs","truncated"],"additionalProperties":false}}}}
```

## The SshKey object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"SshKey":{"type":"object","properties":{"id":{"type":"string","description":"Key id"},"label":{"type":"string"},"fingerprint":{"type":"string"},"servers":{"type":"array","items":{"type":"string"},"description":"Addresses of the servers the key is installed on"},"createdAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]}},"required":["id","label","fingerprint","servers","createdAt"],"additionalProperties":false}}}}
```

## The Region object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Region":{"type":"object","properties":{"id":{"type":"string","description":"Region id to use when provisioning"},"name":{"type":"string"},"location":{"type":"string","description":"City or area"},"recommended":{"type":"boolean"}},"required":["id","name","location","recommended"],"additionalProperties":false}}}}
```

## The InstanceType object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"InstanceType":{"type":"object","properties":{"id":{"type":"string","description":"Instance type id to use when provisioning"},"name":{"type":"string"},"category":{"type":"string","description":"General Purpose, Compute Optimized, GPU, ..."},"specs":{"type":"object","properties":{"vCpus":{"type":"number"},"memory":{"type":"string","description":"Human-readable, e.g. 8 GiB"},"storage":{"type":"string"},"networkPerformance":{"type":"string"},"gpuType":{"type":"string"},"gpuManufacturer":{"type":"string"},"gpuCount":{"type":"number"},"gpuMemory":{"type":"string"}},"required":["vCpus","memory"],"additionalProperties":false},"pricePerHour":{"type":"number","description":"Customer price in USD per hour"},"inStock":{"description":"null when the provider does not report stock","type":["boolean","null"]}},"required":["id","name","category","specs","pricePerHour","inStock"],"additionalProperties":false}}}}
```

## The MarketplaceBrowse object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"MarketplaceBrowse":{"type":"object","properties":{"listings":{"type":"array","items":{"$ref":"#/components/schemas/MarketplaceListing"}},"summary":{"type":"object","properties":{"availableMachines":{"type":"integer"},"configurations":{"type":"integer"},"fromPriceCentsPerGpuHour":{"type":"number"},"fromPriceCentsPerHour":{"type":"number"}},"required":["availableMachines","configurations"],"additionalProperties":false},"truncated":{"type":"boolean","description":"The scan hit its cap; counts are lower bounds"}},"required":["listings","summary","truncated"],"additionalProperties":false},"MarketplaceListing":{"type":"object","properties":{"configId":{"type":"string","description":"Stable id of this hardware profile and country bucket"},"hardwareProfile":{"type":"string"},"gpuModel":{"description":"null for CPU-only machines","type":["string","null"]},"gpusPerMachine":{"type":"integer"},"vramGbPerGpu":{"type":"number"},"cpuThreads":{"type":"number"},"minCpuPackages":{"description":"Smallest physical CPU count in the bucket","type":"number"},"ramGb":{"type":"number"},"storageGb":{"type":"number"},"countryCode":{"type":"string","description":"ISO country code; empty when unreported"},"locationLabel":{"type":"string"},"tierIds":{"type":"array","items":{"type":"string"}},"isVetted":{"type":"boolean"},"totalMachines":{"type":"integer"},"availableMachines":{"type":"integer"},"minPriceCentsPerHour":{"type":"number","description":"Cheapest machine-hour in the bucket"},"maxPriceCentsPerHour":{"type":"number"},"pricePerGpuHourCents":{"type":"number"},"guaranteedDays":{"description":"Weakest availability guarantee in the bucket","type":"number"},"isOpenEnded":{"type":"boolean","description":"Every machine is available until its provider changes its mind"},"noticeHours":{"type":"number"}},"required":["configId","hardwareProfile","gpuModel","gpusPerMachine","countryCode","locationLabel","tierIds","isVetted","totalMachines","availableMachines","minPriceCentsPerHour","maxPriceCentsPerHour","isOpenEnded","noticeHours"],"additionalProperties":false}}}}
```

## The MarketplaceListing object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"MarketplaceListing":{"type":"object","properties":{"configId":{"type":"string","description":"Stable id of this hardware profile and country bucket"},"hardwareProfile":{"type":"string"},"gpuModel":{"description":"null for CPU-only machines","type":["string","null"]},"gpusPerMachine":{"type":"integer"},"vramGbPerGpu":{"type":"number"},"cpuThreads":{"type":"number"},"minCpuPackages":{"description":"Smallest physical CPU count in the bucket","type":"number"},"ramGb":{"type":"number"},"storageGb":{"type":"number"},"countryCode":{"type":"string","description":"ISO country code; empty when unreported"},"locationLabel":{"type":"string"},"tierIds":{"type":"array","items":{"type":"string"}},"isVetted":{"type":"boolean"},"totalMachines":{"type":"integer"},"availableMachines":{"type":"integer"},"minPriceCentsPerHour":{"type":"number","description":"Cheapest machine-hour in the bucket"},"maxPriceCentsPerHour":{"type":"number"},"pricePerGpuHourCents":{"type":"number"},"guaranteedDays":{"description":"Weakest availability guarantee in the bucket","type":"number"},"isOpenEnded":{"type":"boolean","description":"Every machine is available until its provider changes its mind"},"noticeHours":{"type":"number"}},"required":["configId","hardwareProfile","gpuModel","gpusPerMachine","countryCode","locationLabel","tierIds","isVetted","totalMachines","availableMachines","minPriceCentsPerHour","maxPriceCentsPerHour","isOpenEnded","noticeHours"],"additionalProperties":false}}}}
```

## The Balance object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Balance":{"type":"object","properties":{"balanceCents":{"type":"number","description":"Paid balance"},"promoBalanceCents":{"type":"number","description":"Promotional credit, spent first"},"currency":{"type":"string"},"overLimitCents":{"type":"number","description":"How far below zero the balance may go"},"status":{"type":["string","null"]},"mode":{"type":"string","description":"Billing mode of the organization"},"frozen":{"type":"boolean","description":"The organization is frozen: writes are refused until it is unfrozen"},"autoReload":{"$ref":"#/components/schemas/AutoReload"}},"required":["balanceCents","promoBalanceCents","currency","overLimitCents","status","mode","frozen","autoReload"],"additionalProperties":false},"AutoReload":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The saved card is charged automatically when the balance drops below the threshold"},"thresholdCents":{"description":"Balance that triggers a reload","type":["number","null"]},"targetCents":{"description":"Balance after a reload","type":["number","null"]}},"required":["enabled","thresholdCents","targetCents"],"additionalProperties":false}}}}
```

## The AutoReload object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"AutoReload":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The saved card is charged automatically when the balance drops below the threshold"},"thresholdCents":{"description":"Balance that triggers a reload","type":["number","null"]},"targetCents":{"description":"Balance after a reload","type":["number","null"]}},"required":["enabled","thresholdCents","targetCents"],"additionalProperties":false}}}}
```

## The CostSummary object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"CostSummary":{"type":"object","properties":{"start":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"end":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"currency":{"type":"string"},"totalCost":{"type":"number","description":"Total for the range, in the billing currency"},"byProject":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"projectName":{"type":"string"},"cost":{"type":"number"}},"required":["projectId","projectName","cost"],"additionalProperties":false}},"byApp":{"type":"array","items":{"type":"object","properties":{"appId":{"type":"string"},"appName":{"type":"string"},"projectId":{"type":"string"},"cost":{"type":"number"}},"required":["appId","appName","projectId","cost"],"additionalProperties":false}},"byResource":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"cost":{"type":"number"},"usage":{"type":"number"},"unit":{"type":"string"}},"required":["type","cost","usage","unit"],"additionalProperties":false},"description":"Cost per billed resource (CPU, GPU, RAM, storage, bandwidth, ...)"},"daily":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"YYYY-MM-DD"},"cost":{"type":"number"}},"required":["date","cost"],"additionalProperties":false}}},"required":["start","end","currency","totalCost","byProject","byApp","byResource","daily"],"additionalProperties":false}}}}
```

## The Topup object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Topup":{"type":"object","properties":{"id":{"type":"string","description":"Top-up id; also the Stripe payment intent id"},"status":{"type":"string","enum":["succeeded","processing","requires_action","failed"],"description":"Charge state. Credits are added once it is succeeded and the payment has been recorded"},"amountCents":{"type":"integer","description":"Amount charged, in US cents"},"credited":{"type":"boolean","description":"Whether the credits are on the balance yet"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","status","amountCents","credited","createdAt"],"additionalProperties":false}}}}
```

## The CheckoutSession object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"CheckoutSession":{"type":"object","properties":{"id":{"type":"string","description":"Checkout session id"},"url":{"type":"string","description":"Hosted payment page; the user opens it in a browser and pays there"},"amountCents":{"type":"integer","description":"Amount the page will charge, in US cents"},"expiresAt":{"type":"string","format":"date-time","description":"The link stops working after this time"}},"required":["id","url","amountCents","expiresAt"],"additionalProperties":false}}}}
```

## The Invoice object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Invoice":{"type":"object","properties":{"number":{"type":"string","description":"Invoice number; what the other invoice operations take"},"period":{"type":"object","properties":{"start":{"type":"string","description":"YYYY-MM-DD"},"end":{"type":"string","description":"YYYY-MM-DD"}},"required":["start","end"],"additionalProperties":false,"description":"Billing period, inclusive"},"status":{"type":"string","enum":["draft","finalized","paid"]},"partialMonth":{"type":"boolean","description":"The organization's billing began during the period"},"currency":{"type":"string"},"totalCents":{"type":"integer","description":"Usage charged in the period"},"amountDueCents":{"type":"integer","description":"What the organization owes on this invoice; 0 when credit covered it"},"closingBalanceCents":{"type":"integer","description":"Balance at the end of the period; negative means owed"},"createdOn":{"type":"string","description":"YYYY-MM-DD"},"updatedOn":{"anyOf":[{"type":"string","description":"YYYY-MM-DD"},{"type":"null"}]}},"required":["number","period","status","partialMonth","currency","totalCents","amountDueCents","closingBalanceCents","createdOn","updatedOn"],"additionalProperties":false}}}}
```

## The InvoiceDetail object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"InvoiceDetail":{"type":"object","properties":{"number":{"type":"string","description":"Invoice number; what the other invoice operations take"},"period":{"type":"object","properties":{"start":{"type":"string","description":"YYYY-MM-DD"},"end":{"type":"string","description":"YYYY-MM-DD"}},"required":["start","end"],"additionalProperties":false,"description":"Billing period, inclusive"},"status":{"type":"string","enum":["draft","finalized","paid"]},"partialMonth":{"type":"boolean","description":"The organization's billing began during the period"},"currency":{"type":"string"},"totalCents":{"type":"integer","description":"Usage charged in the period"},"amountDueCents":{"type":"integer","description":"What the organization owes on this invoice; 0 when credit covered it"},"closingBalanceCents":{"type":"integer","description":"Balance at the end of the period; negative means owed"},"createdOn":{"type":"string","description":"YYYY-MM-DD"},"updatedOn":{"anyOf":[{"type":"string","description":"YYYY-MM-DD"},{"type":"null"}]},"customer":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":["string","null"]},"billingEmail":{"type":["string","null"]}},"required":["email","name","billingEmail"],"additionalProperties":false},"statement":{"type":"object","properties":{"openingBalanceCents":{"type":"integer"},"closingBalanceCents":{"type":"integer"},"amountDueCents":{"type":"integer"},"paymentsCents":{"type":"integer","description":"Card and off-platform payments received in the period"},"promosCents":{"type":"integer","description":"Promotional credit granted in the period"},"refundsCents":{"type":"integer","description":"Signed"},"adjustmentsCents":{"type":"integer","description":"Signed"},"usageCents":{"type":"integer","description":"Usage charged in the period"},"taxCents":{"type":"integer","description":"Tax due on the amount owed; 0 when nothing is owed or no rate applies"},"taxRateBps":{"type":"integer","description":"Tax rate the invoice was billed under, in basis points"}},"required":["openingBalanceCents","closingBalanceCents","amountDueCents","paymentsCents","promosCents","refundsCents","adjustmentsCents","usageCents","taxCents","taxRateBps"],"additionalProperties":false,"description":"The statement summary: how the balance moved over the period"},"items":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string","description":"What was billed, e.g. a GPU model, RAM, storage, a server"},"detail":{"type":["string","null"]},"csp":{"type":["string","null"]},"region":{"type":["string","null"]},"zone":{"type":["string","null"]},"kcRegion":{"type":["string","null"]},"quantity":{"type":"number"},"unit":{"type":"string"},"unitPrice":{"type":"number","description":"Price per unit, in currency units (fractional)"},"amount":{"type":"number","description":"quantity times unitPrice, in currency units"}},"required":["resource","detail","csp","region","zone","kcRegion","quantity","unit","unitPrice","amount"],"additionalProperties":false},"description":"Itemized usage"},"credits":{"type":"array","items":{"type":"object","properties":{"ledgerEntryId":{"type":"string"},"type":{"type":"string","description":"Ledger entry type: credit_topup, manual_payment, a promo, refund, adjustment"},"at":{"type":"string","description":"ISO 8601 timestamp"},"amountCents":{"type":"integer","description":"Signed"},"label":{"type":"string"},"paymentMethod":{"anyOf":[{"type":"object","properties":{"brand":{"type":["string","null"]},"last4":{"type":["string","null"]}},"required":["brand","last4"],"additionalProperties":false},{"type":"null"}]}},"required":["ledgerEntryId","type","at","amountCents","label","paymentMethod"],"additionalProperties":false},"description":"Payments, promos, refunds and adjustments within the period"},"finalizedOn":{"anyOf":[{"type":"string","description":"YYYY-MM-DD"},{"type":"null"}]},"paidOn":{"anyOf":[{"type":"string","description":"YYYY-MM-DD"},{"type":"null"}]}},"required":["number","period","status","partialMonth","currency","totalCents","amountDueCents","closingBalanceCents","createdOn","updatedOn","customer","statement","items","credits","finalizedOn","paidOn"],"additionalProperties":false}}}}
```

## The UsageCharge object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"UsageCharge":{"type":"object","properties":{"period":{"type":"string","format":"date-time","description":"Start of the day or hour, in the requested time zone"},"amountCents":{"type":"number","description":"Usage charged in the period, including fractional cents"},"appsCents":{"type":"number","description":"Of amountCents, serverless app usage"},"serversCents":{"type":"number","description":"Of amountCents, dedicated servers"},"spotCents":{"type":"number","description":"Of amountCents, spot leases"},"currency":{"type":"string"}},"required":["period","amountCents","appsCents","serversCents","spotCents","currency"],"additionalProperties":false}}}}
```

## The CreditEntry object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"CreditEntry":{"type":"object","properties":{"id":{"type":"string","description":"Ledger entry id"},"at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},"type":{"type":"string","enum":["credit_topup","manual_payment","signup_promo","credit_promo","social_media_promo","refund","adjustment"],"description":"credit_topup and manual_payment are money in; the promos are granted credit"},"amountCents":{"type":"integer","description":"Signed: positive adds credit, negative removes it"},"currency":{"type":"string"},"status":{"type":"string","description":"succeeded, pending or failed"},"paymentMethod":{"anyOf":[{"type":"object","properties":{"brand":{"type":["string","null"]},"last4":{"type":["string","null"]}},"required":["brand","last4"],"additionalProperties":false},{"type":"null"}],"description":"The card charged, for card payments"},"note":{"description":"A note left by the person who recorded a manual entry","type":["string","null"]}},"required":["id","at","type","amountCents","currency","status","paymentMethod","note"],"additionalProperties":false}}}}
```

## The PaymentMethod object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"PaymentMethod":{"type":"object","properties":{"id":{"type":"string","description":"Payment method id"},"brand":{"description":"Card brand, e.g. visa","type":["string","null"]},"last4":{"type":["string","null"]},"expMonth":{"anyOf":[{"type":"integer"},{"type":"null"}]},"expYear":{"anyOf":[{"type":"integer"},{"type":"null"}]},"default":{"type":"boolean","description":"The card auto-reload and top-ups charge"},"addedAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"}},"required":["id","brand","last4","expMonth","expYear","default","addedAt"],"additionalProperties":false}}}}
```

## The NodeProtection object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"NodeProtection":{"type":"object","properties":{"enabled":{"type":"boolean","description":"The organization's dedicated servers are hibernated when the balance runs low"},"thresholdHours":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Hours of runway left (balance over spend rate) at which the servers are hibernated; null when off"},"hibernatedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When protection last hibernated the servers"},"deprovisionedAt":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}],"description":"When a balance past its limit last deprovisioned them"}},"required":["enabled","thresholdHours","hibernatedAt","deprovisionedAt"],"additionalProperties":false}}}}
```

## The Error object

```json
{"openapi":"3.1.0","info":{"title":"Kinesis API","version":"1.5.0"},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable, machine-readable error code"},"message":{"type":"string","description":"Human-readable explanation"},"requestId":{"type":"string","description":"Quote this when contacting support"},"issues":{"type":"array","description":"Present on invalid_request: one entry per invalid field","items":{"type":"object","required":["path","message"],"properties":{"path":{"type":"string"},"message":{"type":"string"}}}},"requiredScopes":{"type":"array","items":{"type":"string"},"description":"insufficient_scope: the permissions the key lacks"},"billingUrl":{"type":"string","description":"Dashboard page where the user can resolve a billing problem (insufficient_balance, no_payment_method, ...)"},"topUpNeededCents":{"type":"integer","description":"insufficient_balance: credits to add, in US cents"},"appIds":{"type":"array","items":{"type":"string"},"description":"project_has_running_apps: the apps that are still live"},"resetAt":{"type":"string","format":"date-time","description":"rate_limited, topup_limit: when the window resets"},"retryAfterSec":{"type":"integer","description":"request_in_progress: seconds to wait before retrying"},"limit":{"type":"integer","description":"payload_too_large: bytes allowed; rate_limited: requests per window"},"maxCents":{"type":"integer","description":"amount_too_large: the per-transaction maximum"},"declineCode":{"type":"string","description":"card_declined: the issuer's decline code"},"paymentIntentId":{"type":"string","description":"card outcomes: the Stripe payment intent involved"},"allowed":{"type":"array","items":{"type":"string"},"description":"method_not_allowed: the methods the path accepts"}},"additionalProperties":true}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.kinesis.network/api/models.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
