{"components":{"responses":{"errors":{"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/errors"}}},"description":"General Error"}},"schemas":{"app":{"additionalProperties":false,"description":"A \"Resource object\" representing a app","properties":{"attributes":{"additionalProperties":false,"description":"An attributes object for a app","properties":{"auto_deploy_branch":{"description":"Field included by default.","nullable":true,"type":"string"},"auto_deploy_enabled":{"description":"Field included by default.","type":"boolean"},"container_port":{"description":"Field included by default.","type":"integer"},"cpu_limit":{"description":"Field included by default.","format":"float","type":"number"},"default_branch":{"description":"Field included by default.","nullable":true,"type":"string"},"description":{"description":"Field included by default.","nullable":true,"type":"string"},"health_check_path":{"description":"Field included by default.","nullable":true,"type":"string"},"health_check_port":{"description":"Field included by default.","nullable":true,"type":"integer"},"health_check_type":{"description":"Field included by default.","enum":["http","tcp"],"type":"string"},"inserted_at":{"description":"Field included by default.","format":"date-time","type":"string"},"memory_limit_mb":{"description":"Field included by default.","type":"integer"},"name":{"description":"Field included by default.","type":"string"},"pids_limit":{"description":"Field included by default.","type":"integer"},"repo_url":{"description":"Field included by default.","type":"string"},"stopped_at":{"description":"Field included by default.","format":"date-time","nullable":true,"type":"string"},"stopped_by":{"description":"Field included by default.","enum":["user","platform"],"nullable":true,"type":"string"},"subdomain":{"description":"Field included by default.","type":"string"},"updated_at":{"description":"Field included by default.","format":"date-time","type":"string"},"url":{"description":"Field included by default.","nullable":true,"type":"string"}},"required":["name","subdomain","repo_url","auto_deploy_enabled","container_port","health_check_type","memory_limit_mb","cpu_limit","pids_limit","inserted_at","updated_at"],"type":"object"},"id":{"type":"string"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"},"relationships":{"additionalProperties":false,"description":"A relationships object for a app","properties":{"latest_build":{"properties":{"data":{"additionalProperties":false,"description":"An identifier for latest_build","nullable":true,"properties":{"id":{"type":"string"},"meta":{"additionalProperties":true,"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"}}},"latest_deploy":{"properties":{"data":{"additionalProperties":false,"description":"An identifier for latest_deploy","nullable":true,"properties":{"id":{"type":"string"},"meta":{"additionalProperties":true,"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"}}}},"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"},"build":{"additionalProperties":false,"description":"A \"Resource object\" representing a build","properties":{"attributes":{"additionalProperties":false,"description":"An attributes object for a build","properties":{"branch":{"description":"Field included by default.","nullable":true,"type":"string"},"error_reason":{"description":"Field included by default.","nullable":true,"type":"string"},"finished_at":{"description":"Field included by default.","format":"date-time","nullable":true,"type":"string"},"repo_commit":{"description":"Field included by default.","nullable":true,"type":"string"},"started_at":{"description":"Field included by default.","format":"date-time","type":"string"},"status":{"description":"Field included by default.","type":"string"},"trigger_type":{"description":"Field included by default.","nullable":true,"type":"string"}},"required":["status","started_at"],"type":"object"},"id":{"type":"string"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"},"relationships":{"additionalProperties":false,"description":"A relationships object for a build","properties":{},"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"},"deploy":{"additionalProperties":false,"description":"A \"Resource object\" representing a deploy","properties":{"attributes":{"additionalProperties":false,"description":"An attributes object for a deploy","properties":{"error_reason":{"description":"Field included by default.","nullable":true,"type":"string"},"finished_at":{"description":"Field included by default.","format":"date-time","nullable":true,"type":"string"},"started_at":{"description":"Field included by default.","format":"date-time","type":"string"},"status":{"description":"Field included by default.","type":"string"}},"required":["status","started_at"],"type":"object"},"id":{"type":"string"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"},"relationships":{"additionalProperties":false,"description":"A relationships object for a deploy","properties":{"build":{"properties":{"data":{"additionalProperties":false,"description":"An identifier for build","nullable":true,"properties":{"id":{"type":"string"},"meta":{"additionalProperties":true,"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"}}}},"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"},"env_var":{"additionalProperties":false,"description":"A \"Resource object\" representing a env_var","properties":{"attributes":{"additionalProperties":false,"description":"An attributes object for a env_var","properties":{"inserted_at":{"description":"Field included by default.","format":"date-time","type":"string"},"is_secret":{"description":"Field included by default.","type":"boolean"},"key":{"description":"Field included by default.","type":"string"},"last_rotated_at":{"description":"Field included by default.","nullable":true},"scope":{"description":"Field included by default.","enum":["build","runtime","both"],"type":"string"},"updated_at":{"description":"Field included by default.","format":"date-time","type":"string"}},"required":["key","scope","is_secret","inserted_at","updated_at"],"type":"object"},"id":{"type":"string"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"},"relationships":{"additionalProperties":false,"description":"A relationships object for a env_var","properties":{},"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"},"error":{"additionalProperties":false,"properties":{"code":{"description":"An application-specific error code, expressed as a string value.","type":"string"},"detail":{"description":"A human-readable explanation specific to this occurrence of the problem.","type":"string"},"id":{"description":"A unique identifier for this particular occurrence of the problem.","type":"string"},"links":{"$ref":"#/components/schemas/links"},"source":{"properties":{"parameter":{"description":"A string indicating which query parameter caused the error.","type":"string"},"pointer":{"description":"A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. \"/data\" for a primary data object, or \"/data/attributes/title\" for a specific attribute].","type":"string"}},"type":"object"},"status":{"description":"The HTTP status code applicable to this problem, expressed as a string value.","type":"string"},"title":{"description":"A short, human-readable summary of the problem. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization.","type":"string"}},"type":"object"},"errors":{"items":{"$ref":"#/components/schemas/error"},"type":"array","uniqueItems":true},"link":{"description":"A link MUST be represented as either: a string containing the link's URL or a link object.","type":"string"},"links":{"additionalProperties":{"$ref":"#/components/schemas/link"},"type":"object"},"user":{"additionalProperties":false,"description":"A \"Resource object\" representing a user","properties":{"attributes":{"additionalProperties":false,"description":"An attributes object for a user","properties":{"email":{"description":"Field included by default.","type":"string"}},"required":["email"],"type":"object"},"id":{"type":"string"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"},"relationships":{"additionalProperties":false,"description":"A relationships object for a user","properties":{},"type":"object"},"type":{"type":"string"}},"required":["type","id"],"type":"object"}},"securitySchemes":{"bearerAuth":{"description":"A personal API key, created in the dashboard. It starts with lillamolnet_.","scheme":"bearer","type":"http"}}},"info":{"title":"Lilla Molnet API","version":"1"},"openapi":"3.0.0","paths":{"/api/v1/apps":{"get":{"callbacks":{},"deprecated":false,"description":"Your apps, newest first.","parameters":[{"description":"Relationship paths to include in the response","explode":false,"in":"query","name":"include","required":false,"schema":{"pattern":"^(latest_build|latest_deploy|latest_deploy.build)(,(latest_build|latest_deploy|latest_deploy.build))*$","type":"string"},"style":"form"},{"description":"Limits the response fields to only those listed for each type","in":"query","name":"fields","required":false,"schema":{"additionalProperties":true,"example":{"app":"name,subdomain,description,repo_url,default_branch,auto_deploy_enabled,auto_deploy_branch,stopped_at,stopped_by,inserted_at,updated_at,url,container_port,health_check_path,health_check_type,health_check_port,memory_limit_mb,cpu_limit,pids_limit"},"properties":{"app":{"description":"Comma separated field names for app","example":"name,subdomain,description,repo_url,default_branch,auto_deploy_enabled,auto_deploy_branch,stopped_at,stopped_by,inserted_at,updated_at,url,container_port,health_check_path,health_check_type,health_check_port,memory_limit_mb,cpu_limit,pids_limit","type":"string"}},"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"description":"An array of resource objects representing a app","items":{"$ref":"#/components/schemas/app"},"type":"array","uniqueItems":true},"included":{"items":{"oneOf":[{"$ref":"#/components/schemas/build"},{"$ref":"#/components/schemas/deploy"}]},"type":"array","uniqueItems":true},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"}},"type":"object"}}},"description":"Success"},"default":{"$ref":"#/components/responses/errors"}},"tags":["app"]},"post":{"callbacks":{},"deprecated":false,"description":"Create an app from one of your repositories. Give the repository as repo_id or full_name, and integration_id only when more than one integration reaches it. The platform chooses the servers. Needs the apps:write scope. The app is not deployed. A taken subdomain is 409 with a free one in errors[0].meta.suggested_subdomain. A repository that no integration reaches is 422 with errors[0].meta.install_url, and one that several reach is 422 with them in errors[0].meta.integrations. When no server has room the answer is 503.","operationId":"create_app","parameters":[],"requestBody":{"content":{"application/vnd.api+json":{"schema":{"properties":{"data":{"properties":{"attributes":{"properties":{"auto_deploy_branch":{"type":"string"},"auto_deploy_enabled":{"type":"boolean"},"container_port":{"type":"integer"},"description":{"type":"string"},"full_name":{"description":"owner/repo","type":"string"},"health_check_path":{"type":"string"},"health_check_port":{"type":"integer"},"health_check_type":{"enum":["http","tcp"],"type":"string"},"integration_id":{"type":"string"},"name":{"type":"string"},"repo_id":{"type":"integer"},"subdomain":{"type":"string"}},"required":["name","subdomain"],"type":"object"}},"required":["attributes"],"type":"object"}},"required":["data"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/app"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"}},"required":["data"],"type":"object"}}},"description":"The app"},"default":{"$ref":"#/components/responses/errors"}},"tags":["app"]}},"/api/v1/apps/{app_id}/builds":{"get":{"callbacks":{},"deprecated":false,"description":"An app's builds, newest first. 20 per page by default, at most 100.","parameters":[{"in":"path","name":"app_id","required":true,"schema":{"format":"uuid","type":"string"},"style":"simple"},{"description":"Paginates the response with the limit and offset or keyset pagination.","in":"query","name":"page","required":false,"schema":{"example":{"limit":20,"offset":0},"properties":{"limit":{"minimum":1,"type":"integer"},"offset":{"minimum":0,"type":"integer"}},"type":"object"},"style":"deepObject"},{"description":"Relationship paths to include in the response","explode":false,"in":"query","name":"include","required":false,"schema":{"pattern":"^()(,())*$","type":"string"},"style":"form"},{"description":"Limits the response fields to only those listed for each type","in":"query","name":"fields","required":false,"schema":{"additionalProperties":true,"example":{"build":"status,started_at,finished_at,error_reason,repo_commit,trigger_type,branch"},"properties":{"build":{"description":"Comma separated field names for build","example":"status,started_at,finished_at,error_reason,repo_commit,trigger_type,branch","type":"string"}},"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"description":"An array of resource objects representing a build","items":{"$ref":"#/components/schemas/build"},"type":"array","uniqueItems":true},"included":{"items":{"oneOf":[]},"type":"array","uniqueItems":true},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"}},"type":"object"}}},"description":"Success"},"default":{"$ref":"#/components/responses/errors"}},"tags":["build"]}},"/api/v1/apps/{app_id}/env":{"get":{"callbacks":{},"deprecated":false,"description":"An app's environment variables, by key. The values are never in the API.","parameters":[{"in":"path","name":"app_id","required":true,"schema":{"format":"uuid","type":"string"},"style":"simple"},{"description":"Sort order to apply to the results","explode":false,"in":"query","name":"sort","required":false,"schema":{"pattern":"^(key|-key|\\+\\+key|--key|scope|-scope|\\+\\+scope|--scope|is_secret|-is_secret|\\+\\+is_secret|--is_secret|last_rotated_at|-last_rotated_at|\\+\\+last_rotated_at|--last_rotated_at|inserted_at|-inserted_at|\\+\\+inserted_at|--inserted_at|updated_at|-updated_at|\\+\\+updated_at|--updated_at)(,(key|-key|\\+\\+key|--key|scope|-scope|\\+\\+scope|--scope|is_secret|-is_secret|\\+\\+is_secret|--is_secret|last_rotated_at|-last_rotated_at|\\+\\+last_rotated_at|--last_rotated_at|inserted_at|-inserted_at|\\+\\+inserted_at|--inserted_at|updated_at|-updated_at|\\+\\+updated_at|--updated_at))*$","type":"string"},"style":"form"},{"description":"Relationship paths to include in the response","explode":false,"in":"query","name":"include","required":false,"schema":{"pattern":"^()(,())*$","type":"string"},"style":"form"},{"description":"Limits the response fields to only those listed for each type","in":"query","name":"fields","required":false,"schema":{"additionalProperties":true,"example":{"env_var":"key,scope,is_secret,last_rotated_at,inserted_at,updated_at"},"properties":{"env_var":{"description":"Comma separated field names for env_var","example":"key,scope,is_secret,last_rotated_at,inserted_at,updated_at","type":"string"}},"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"description":"An array of resource objects representing a env_var","items":{"$ref":"#/components/schemas/env_var"},"type":"array","uniqueItems":true},"included":{"items":{"oneOf":[]},"type":"array","uniqueItems":true},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"}},"type":"object"}}},"description":"Success"},"default":{"$ref":"#/components/responses/errors"}},"tags":["env_var"]}},"/api/v1/apps/{app_id}/env/{key}":{"delete":{"callbacks":{},"deprecated":false,"description":"Remove an environment variable. Needs the env:write scope, and read. Takes effect at the next deploy.","operationId":"unset_env_var","parameters":[{"in":"path","name":"app_id","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"key","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"204":{"description":"Removed"},"default":{"$ref":"#/components/responses/errors"}},"tags":["env_var"]},"put":{"callbacks":{},"deprecated":false,"description":"Set an environment variable. A new key is created, a plain variable gets the new value, and a secret one is rotated. Needs the env:write scope, and read to find the app. Takes effect at the next deploy.","operationId":"set_env_var","parameters":[{"in":"path","name":"app_id","required":true,"schema":{"type":"string"},"style":"simple"},{"in":"path","name":"key","required":true,"schema":{"type":"string"},"style":"simple"}],"requestBody":{"content":{"application/vnd.api+json":{"schema":{"properties":{"data":{"properties":{"attributes":{"properties":{"is_secret":{"type":"boolean"},"scope":{"enum":["build","runtime","both"],"type":"string"},"value":{"type":"string","writeOnly":true}},"required":["value"],"type":"object"}},"required":["attributes"],"type":"object"}},"required":["data"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/env_var"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"result":{"enum":["created","updated","rotated"],"type":"string"},"takes_effect":{"enum":["next_deploy"],"type":"string"}},"required":["result","takes_effect"],"type":"object"}},"required":["data","meta"],"type":"object"}}},"description":"The variable, never with its value"},"201":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/env_var"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"result":{"enum":["created","updated","rotated"],"type":"string"},"takes_effect":{"enum":["next_deploy"],"type":"string"}},"required":["result","takes_effect"],"type":"object"}},"required":["data","meta"],"type":"object"}}},"description":"The variable, never with its value"},"default":{"$ref":"#/components/responses/errors"}},"tags":["env_var"]}},"/api/v1/apps/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"One of your apps. Include latest_build, latest_deploy and latest_deploy.build for its status.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"},{"description":"Relationship paths to include in the response","explode":false,"in":"query","name":"include","required":false,"schema":{"pattern":"^(latest_build|latest_deploy|latest_deploy.build)(,(latest_build|latest_deploy|latest_deploy.build))*$","type":"string"},"style":"form"},{"description":"Limits the response fields to only those listed for each type","in":"query","name":"fields","required":false,"schema":{"additionalProperties":true,"example":{"app":"name,subdomain,description,repo_url,default_branch,auto_deploy_enabled,auto_deploy_branch,stopped_at,stopped_by,inserted_at,updated_at,url,container_port,health_check_path,health_check_type,health_check_port,memory_limit_mb,cpu_limit,pids_limit"},"properties":{"app":{"description":"Comma separated field names for app","example":"name,subdomain,description,repo_url,default_branch,auto_deploy_enabled,auto_deploy_branch,stopped_at,stopped_by,inserted_at,updated_at,url,container_port,health_check_path,health_check_type,health_check_port,memory_limit_mb,cpu_limit,pids_limit","type":"string"}},"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/app"},"included":{"items":{"oneOf":[{"$ref":"#/components/schemas/build"},{"$ref":"#/components/schemas/deploy"}]},"type":"array","uniqueItems":true},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"}}}}},"description":"Success"},"default":{"$ref":"#/components/responses/errors"}},"tags":["app"]}},"/api/v1/apps/{id}/deploys":{"post":{"callbacks":{},"deprecated":false,"description":"Start a build and a deploy of one of your apps. Needs the deploy scope, and read to find the app. When a build is already queued or running, the answer is 409 with its id in errors[0].meta.build_id.","operationId":"start_deploy","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"202":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/build"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"}},"required":["data"],"type":"object"}}},"description":"The build, queued"},"default":{"$ref":"#/components/responses/errors"}},"tags":["build"]}},"/api/v1/apps/{id}/logs":{"get":{"callbacks":{},"deprecated":false,"description":"An app's logs, oldest first. Needs the logs:read scope, since logs may contain personal data. Without after: the latest limit lines from the last since seconds. With after: the lines after it, to follow the log. Pass meta.next_after as after in the next request.","operationId":"app_logs","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"},{"description":"Seconds back, 1 to 604800. Defaults to 3600.","in":"query","name":"since","required":false,"schema":{"maximum":604800,"minimum":1,"type":"integer"}},{"description":"Lines, 1 to 1000. Defaults to 200.","in":"query","name":"limit","required":false,"schema":{"maximum":1000,"minimum":1,"type":"integer"}},{"description":"Only lines that contain the text.","in":"query","name":"text","required":false,"schema":{"maxLength":200,"type":"string"}},{"description":"Nanoseconds since the Unix epoch. Only lines after it.","in":"query","name":"after","required":false,"schema":{"pattern":"^[0-9]+$","type":"string"}}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"lines":{"items":{"properties":{"container":{"nullable":true,"type":"string"},"line":{"type":"string"},"time":{"format":"date-time","type":"string"},"ts":{"description":"Nanoseconds since the Unix epoch","type":"string"}},"required":["ts","time","line"],"type":"object"},"type":"array"},"next_after":{"nullable":true,"type":"string"}},"required":["lines","next_after"],"type":"object"}},"required":["meta"],"type":"object"}}},"description":"The lines"},"default":{"$ref":"#/components/responses/errors"}},"tags":["app"]}},"/api/v1/apps/{id}/start":{"post":{"callbacks":{},"deprecated":false,"description":"Start one of your stopped apps. Needs the deploy scope, and read to find the app.","operationId":"start_app","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/app"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"result":{"enum":["stopped","started","redeploying","not_deployed"],"type":"string"}},"required":["result"],"type":"object"}},"required":["data","meta"],"type":"object"}}},"description":"The app, and what happened"},"default":{"$ref":"#/components/responses/errors"}},"tags":["app"]}},"/api/v1/apps/{id}/stop":{"post":{"callbacks":{},"deprecated":false,"description":"Stop one of your apps, without removing it. Needs the deploy scope, and read to find the app.","operationId":"stop_app","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/app"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"result":{"enum":["stopped","started","redeploying","not_deployed"],"type":"string"}},"required":["result"],"type":"object"}},"required":["data","meta"],"type":"object"}}},"description":"The app, and what happened"},"default":{"$ref":"#/components/responses/errors"}},"tags":["app"]}},"/api/v1/builds/{id}":{"get":{"callbacks":{},"deprecated":false,"description":"One of your builds. The log is at /builds/{id}/log.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"},{"description":"Relationship paths to include in the response","explode":false,"in":"query","name":"include","required":false,"schema":{"pattern":"^()(,())*$","type":"string"},"style":"form"},{"description":"Limits the response fields to only those listed for each type","in":"query","name":"fields","required":false,"schema":{"additionalProperties":true,"example":{"build":"status,started_at,finished_at,error_reason,repo_commit,trigger_type,branch"},"properties":{"build":{"description":"Comma separated field names for build","example":"status,started_at,finished_at,error_reason,repo_commit,trigger_type,branch","type":"string"}},"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/build"},"included":{"items":{"oneOf":[]},"type":"array","uniqueItems":true},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"links":{"additionalProperties":true,"type":"object"},"meta":{"additionalProperties":true,"type":"object"}}}}},"description":"Success"},"default":{"$ref":"#/components/responses/errors"}},"tags":["build"]}},"/api/v1/builds/{id}/log":{"get":{"callbacks":{},"deprecated":false,"description":"A build's log as plain text. Empty when the build has no log.","operationId":"build_log","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"}],"responses":{"200":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"The log"},"default":{"$ref":"#/components/responses/errors"}},"tags":["build"]}},"/api/v1/builds/{id}/wait":{"get":{"callbacks":{},"deprecated":false,"description":"Wait for a build and its deploy to finish, for at most timeout seconds. Answers as soon as they are done, or with since as soon as the result changes. Ask again until meta.done is true.","operationId":"wait_for_deploy","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"style":"simple"},{"description":"Seconds to wait, 0 to 50. Defaults to 50.","in":"query","name":"timeout","required":false,"schema":{"maximum":50,"minimum":0,"type":"integer"}},{"description":"The result the client saw last. The answer then also comes as soon as the result is another.","in":"query","name":"since","required":false,"schema":{"enum":["queued","building","deploying","deployed","build_failed","deploy_failed"],"type":"string"}}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/build"},"included":{"items":{"$ref":"#/components/schemas/deploy"},"type":"array"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"done":{"type":"boolean"},"result":{"enum":["queued","building","deploying","deployed","build_failed","deploy_failed"],"type":"string"}},"required":["done","result"],"type":"object"}},"required":["data","included","meta"],"type":"object"}}},"description":"The build, its latest deploy if any, and how it went"},"default":{"$ref":"#/components/responses/errors"}},"tags":["build"]}},"/api/v1/device/codes":{"post":{"callbacks":{},"deprecated":false,"description":"Start a login from the CLI (RFC 8628). Show user_code and verification_uri to the user, and ask /device/token for the key every interval seconds.","operationId":"device_code","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"properties":{"client_name":{"maxLength":100,"type":"string"}},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"properties":{"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"device_code":{"type":"string"},"expires_in":{"type":"integer"},"interval":{"type":"integer"},"user_code":{"type":"string"},"verification_uri":{"type":"string"},"verification_uri_complete":{"type":"string"}},"required":["device_code","user_code","verification_uri","verification_uri_complete","expires_in","interval"],"type":"object"}},"required":["meta"],"type":"object"}}},"description":"The codes"},"default":{"$ref":"#/components/responses/errors"}},"security":[],"tags":["device"]}},"/api/v1/device/token":{"post":{"callbacks":{},"deprecated":false,"description":"Exchange device_code for an API key once the user has approved it. Until then the answer is 400 with errors[0].code authorization_pending or slow_down, and finally access_denied, expired_token or invalid_grant.","operationId":"device_token","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"properties":{"device_code":{"type":"string"}},"required":["device_code"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"properties":{"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"meta":{"properties":{"api_key":{"type":"string"},"expires_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"}},"required":["api_key","name","scopes","expires_at"],"type":"object"}},"required":["meta"],"type":"object"}}},"description":"The API key, given once"},"default":{"$ref":"#/components/responses/errors"}},"security":[],"tags":["device"]}},"/api/v1/me":{"get":{"callbacks":{},"deprecated":false,"description":"The user behind the API key. meta.api_key describes the key itself.","parameters":[{"description":"Relationship paths to include in the response","explode":false,"in":"query","name":"include","required":false,"schema":{"pattern":"^()(,())*$","type":"string"},"style":"form"},{"description":"Limits the response fields to only those listed for each type","in":"query","name":"fields","required":false,"schema":{"additionalProperties":true,"example":{"user":"email"},"properties":{"user":{"description":"Comma separated field names for user","example":"email","type":"string"}},"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/user"},"included":{"items":{"oneOf":[]},"type":"array","uniqueItems":true},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"},"links":{"additionalProperties":true,"type":"object"},"meta":{"properties":{"api_key":{"description":"The API key used for this request.","properties":{"expires_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"scopes":{"items":{"enum":["read","deploy","env:write","logs:read","apps:write"],"type":"string"},"type":"array"}},"required":["name","scopes","expires_at"],"type":"object"}},"type":"object"}}}}},"description":"Success"},"default":{"$ref":"#/components/responses/errors"}},"tags":["user"]}},"/api/v1/me/api_key":{"delete":{"callbacks":{},"deprecated":false,"description":"Revoke the API key used for this request, as lillamolnet logout does.","operationId":"revoke_current_api_key","parameters":[],"responses":{"204":{"description":"Revoked"},"default":{"$ref":"#/components/responses/errors"}},"tags":["user"]}},"/api/v1/repositories":{"get":{"callbacks":{},"deprecated":false,"description":"The GitHub repositories that your GitHub integrations reach, one per integration and repository. Needs the read scope. An app is created from one of them with POST /api/v1/apps.","operationId":"list_repositories","parameters":[],"responses":{"200":{"content":{"application/vnd.api+json":{"schema":{"additionalProperties":false,"properties":{"data":{"items":{"properties":{"attributes":{"properties":{"clone_url":{"type":"string"},"default_branch":{"type":"string"},"full_name":{"type":"string"},"integration_id":{"type":"string"},"private":{"type":"boolean"}},"required":["full_name","clone_url","default_branch","private","integration_id"],"type":"object"},"id":{"description":"GitHub's id for the repository","type":"string"},"links":{"type":"object"},"meta":{"type":"object"},"relationships":{"type":"object"},"type":{"enum":["repository"],"type":"string"}},"required":["type","id","attributes"],"type":"object"},"type":"array"},"jsonapi":{"properties":{"version":{"type":"string"}},"type":"object"}},"required":["data"],"type":"object"}}},"description":"The repositories"},"default":{"$ref":"#/components/responses/errors"}},"tags":["repository"]}}},"security":[{"bearerAuth":[]}],"servers":[],"tags":[]}